安装(centos6.4)
wget https://nodejs.org/dist/v8.11.3/node-v8.11.3-linux-x64.tar.xz
tar -xvf node-v8.11.3-linux-x64.tar.xz
mv node-v8.11.3-linux-x64/ nodejs
cd nodejs/bin
./node 就能正常使用了
想要命令行直接输node进交互式
创建个软连接即可
ln -s 当前绝对路径 /usr/local/bin/node 即可
新建一个http服务器
var http =require("http");
http.createServer(function(request,response){
response.writeHead(200,{"Content-Type":'text/plain'});
response.end("hello world \n");
}).listen(5000);
console.log("server run in http://127.0.0.1:5000/")
另开一个终端发送连接
curl -i http://localhost:5000/
npm包管理工具
使用 npm -v 查看npm的版本来验证npm是否安装成功,源码安装nodejs自带npm
npm包管理工具更新命令
npm install npm -g
如果想使用淘宝镜像
cnpm install npm -g
使用npm 安装包
npm install 模块名
使用npm 更新包
npm update 模块名
首先安装web模块最常用的包express
npm install express
npm安装的所有包的路径都在根目录下的lib/node_modules
比如我的node安装路径 /home/Desktop/nodejs下
那么模块的包就在/home/Desktop/nodejs/lib/node_modules
npm cache clear可以清空NPM本地缓存,用于对付使用相同版本号发布新版本代码的人。
npm unpublish
nodejs的使用模块
http 构建web服务 模块
fs 读取文件 模块
events 事件绑定 事件监听 模块
nodejs 的异步依托于回调函数,但不是使用了回调就代表异步
fs是读取文件的包
var fs = require("fs");
fs.readFile("./data/test1.txt",function(err,data){
if (err) return console.error(err);
console.log(data.toString());
});
console.log("end")
nodejs 事件监听
var events = require("events")
通过eventEmitter = new events.EventEmitter(); 创建一个事件对象eventEmitter, 属于events.EventEmitter()
通过eventEmitter.on(event_name,callback) 注册事件
通过eventEmitter.emit(event_name) 唤醒事件
下面是示例
var events = require("events")
var eventEmitter = new events.EventEmitter();
var connect_func = function(){
console.log("connect success!")
eventEmitter.emit("recv_data");
};
var recv_data = function(){
console.log("recv_data is success");
}
eventEmitter.on("connect",connect_func);
eventEmitter.on("recv_data",recv_data);
eventEmitter.emit("connect");
console.log("produre is end");
程序运行结果:
connect success!
recv_data is success
produre is end
一个callback是可以注册多个event_name的
同样一个event_name也可以注册多个callback
监听事件的其他API
eventEmitter.once(event_name,callback) 为callback指定一个单次监听器
eventEmitter.removeListener(event_name,callback) 移除callback对应的监听器之一(event_name对应的监听)
eventEmitter.removeAllListeners([event_name]) 如果指定event_name,则移除事件名对应的所有callback,如果不指定,则移除所有event_name对应的callback
eventEmitter.setMaxListeners(num) 如果eventEmitter注册的事件超过10个就会报警,该语句可以修改注册事件上限num
eventEmitter.emit(event, [callback1], [callback2], [...]) 按参数的顺序执行每个监听器,如果事件有注册监听返回 true,否则返回 false,如果唤醒多个callback,返回的是callback对应的boolean值组成的数组
eventEmitter.listeners(event_name) 返回event_name监听的所有callback 数组
require("events")EventEmitter().listenerCount(EventEmitter的实例对象名(eventEmitter), event_name) 类调用类方法. 返回eventEmitter对象下event_name 监听的callback数量num