node可以用于创建自己的服务,是运行在服务端的JavaScript
node.js的第一个应用:
- 新建一个文件,命名为:helloworld.js
- 文件内容为:
// 载入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/');
- ctrl+r进入命令行,输入
node helloworld.js
- 命令行输出:
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的监听器