node.js——DAY1

node可以用于创建自己的服务,是运行在服务端的JavaScript

node.js的第一个应用:

  1. 新建一个文件,命名为:helloworld.js
  2. 文件内容为:
// 载入http模块,并将实例化的HTTP赋值给http
http.createServer(function (request,response) {
    // body...
    response.writeHead(200,{'Content-Type':'text/plain'});
    response.end("hello world");
}).listen(8888);
console.log('server running at http://127.0.0.1:8888/');
  1. ctrl+r进入命令行,输入node helloworld.js
  2. 命令行输出:
    server running at http://127.0.0.1:8888/

    5.在浏览器内输入:http://127.0.0.1:8888/

以上代码就完成了一个HTTP服务器,

http模块提供的函数:createServer会返回一个对象,该对象调用listen方法,指定http服务器监听的端口号。

npm是随同NodeJS一起安装的包管理工具,能够解决NodeJS代码部署上的很多问题,新版的nodejs已经集成了npm。
npm安装nodejs模块语法的格式如下:
npm install <module name>

使用npm命令安装常用的nodejs的web框架模块express
安装好之后,只需要通过以下代码便可实例化
var express = require('express')

如果出现以下错误:
npm err!Error:connect ECONNREFUSED 127.0.0.1:8087
解决办法:npm config set proxy null

其他命令:
npm uninstall express
npm ls
npm update express
npm search express
npm help可以查看所有指令
npm cache clear可以清空npm本地缓存

REPL终端

1.简单的表达式运算1+1
2.使用变量var a = 1
3.多行表达式

do{
x++;
console.log(x);
}while(x < 5) 

4.使用_获取上一个表达式的运算结果

10+20
var sum = _

REPL命令
ctrl + c - 退出当前终端。
ctrl + c 按下两次 - 退出 Node REPL。
ctrl + d - 退出 Node REPL.
.help - 列出使用命令
.break - 退出多行表达式
.clear - 退出多行表达式
.save filename - 保存当前的 Node REPL 会话到指定文件
.load filename - 载入当前 Node REPL 会话的文件内容。

Node.js回调函数

node.js异步编程直接体现就是回调
异步编程依托于回调,但不能说明使用回调后程序就异步了例如可以一边读取文件,一边执行其他命令,可以处理大量的并发请求。

阻塞代码实例:


var fs = require("fs");

var data = fs.readFileSync('test.txt');
console.log(data.toString());
console.log("end")

执行结果

this is a test
end

非阻塞代码实例

var fs = require("fs");
fs.readFile('test.txt',function (err,data) {
    // body...
    if(err) return console.error(err);
    console.log(data.toString());
})
console.log("end");

执行结果:

end
this is a test

Node.js事件循环

var events = require('events');
//引入events模块
var eventEmitter = new events.eventEmitter();
//创建eventEmitter对象
eventEmitter.on('eventName',eventHandler);
//绑定事件及事件处理程序
eventEmitter.emit('eventName')
//触发事件

实例:

var events = require('events');
//引入events模块
var eventEmitter = new events.EventEmitter();
//创建eventEmitter对象

var connectHandler = function connected() {
    // body...
    console.log('connect success');
    eventEmitter.emit('data_received');
    //触发data_reveived事件
};
eventEmitter.on('connection',connectHandler);
//绑定connection事件处理程序
eventEmitter.on('data_received',function(){
    console.log('get it');
});
eventEmitter.emit('connection');
console.log('over');

运行结果:

connect success
get it
over

Node.js EventEmitter

Node.js里面许多对象都会分发事件:一个net.Server对象会在每次有新连接时分发一个事件,一个fs.readStream对象会在文件被打开的时候发出一个事件,所有这些事件对象都是events.EventEmitter的实例。

EventEmitter 的核心就是事件触发与事件监听器功能的封装。

var EventEmitter = require('events').EventEmitter;
var event = new EventEmitter();
//引入events模块
// var eventEmitter = new events.EventEmitter();
//创建eventEmitter对象
// var event = new EventEmitter();
event.on('some_event',function(){
    console.log('some_event emit');
});
setTimeout(function(){
    event.emit('some_event');
},1000);

1秒后控制台输出结果,event对象注册了事件some_event的一个监听器,1000毫秒后向event对象发送事件some_event调用some_event的监听器

猜你喜欢

转载自blog.csdn.net/weixin_36926779/article/details/80303952
今日推荐