这个模块非常强大,以至于现在很少有人会用原生的http模块。 以下是一个http服务器,驱动网页目录,响应post get请求的例子:var express=require('express'); var bodyParser=require('body-parser'); var app=express(); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({extended: true})); app.use('/', express.static("www")); app.listen(8888); app.post('/a',function(req,res){ res.json(req.body); }); app.get('/b',function(req,res){ res.write('Hello'); res.end(); }); 以上的listen语句之前是驱动了一个网页服务器,你可以认为是自己建立了一个apache或者iis,并且将www文件夹设为网页的目录。 post和get语句分别是对应两种请求的处理,如果post请求一个/a就会得到一模一样的请求的数据,如果是直接输入网址localhost:8889/b则会显示Hello。 body-parser模块应用于express应用中,就能通过req.body得到请求体json对象格式。res.write(字符串);res.json(json对象); 用express封装rest接口,需要跨域访问则添加如下代码:(跨域访问在angularjs访问时出现异常,但是jquery没有问题)app.all('*', function(req, res, next) { res.header("Access-Control-Allow-Origin", "*"); res.header("Access-Control-Allow-Headers", "X-Requested-With"); res.header("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS"); res.header("X-Powered-By",' 3.2.1'); res.header("Content-Type", "application/json;charset=utf-8"); next(); });
基本用法:var mysql = require('mysql'); var connection = ysql.createConnection({ host : '127.0.0.1', //主机 user : 'root', //MySQL认证用户名 password : '', //MySQL认证用户密码 port: '3306', //端口号 database:'mydb', //数据库 }); connection.connect(function(err){ if(err){ console.log('[query] - :'+err); return; } console.log('[connection connect] succeed!'); }); connection.query("delete from users where id>20", function(err, rows, fields) { if (err) { console.log('[query] - :'+err); return; } console.log( rows); }); connection.end(function(err){ if(err){ return; } console.log('[connection end] succeed!'); }); connection.on("error", function () { console.log("数据库意外中断"); }); 以上是mysql模块常用的三个函数:连接,查询,关闭;以及监听的错误事件。这四个才能保证连接的完整性,少一项都是不合理的。 连接池用法: 把上面的createServer改为createPool,getConnection获取连接,进行查询,查询成功后release释放连接,将连接返回给连接池。 以下是封装好的一个连接池模块,只需要在主程序中require:var query=require('./mysql.js');query('sql语句',function(err,rows,fields){xx});var mysql=require("mysql"); var pool = mysql.createPool({ host: 'localhost', user: 'root', password: '', database: 'mydb', port: 3306 }); var query=function(sql,callback){ pool.getConnection(function(err,conn){ if(err){ callback(err,null,null); }else{ conn.query(sql,function(qerr,vals,fields){ //释放连接 conn.release(); //事件驱动回调 callback(qerr,vals,fields); }); } }); }; module.exports=query;
这个模块专门用来建立websocket,是非常简单好用的模块。socket.io依托http模块,与http共同占用一个端口。 http服务我们常常会用express来建立,所以一般而言,用如下方式建立websocket服务器:var express=require('express'); var app=express();var server=require('http').createServer(app); var io=require('socket.io').listen(server); server.listen(11111); io.on('connection',function(socket){ socket.on('error',function(err){}); socket.on('disconnect', function () {}); socket.on('myevent',function(data){ socket.emit(data); }); }); 以上便是websocket服务器的建立和监听的错误,断开和自定义事件。 他与socket服务器的用法很像,但是更强大,结合了events模块的功能,能监听和激发自定义的事件。socket.emit('myevent',data);激发事件。 网页部分: 首先要引入这个模块提供的socket.io.js在这个js文件中定义了全局变量io,你可以在script标签中直接var socket=io.connect('ws://localhost:11111'); socket.on('someevent',function(data){ alert(data); }); socket.emit('myevent','hello'); 前后端的用法一致都是on监听自定义的事件,emit激发这些事件。
配合socket.io,用于建立websocket客户端:var socket= require('socket.io-client')('http://127.0.0.1:11111'); socket.on('error', function (err) { console.log("ws连接出错"); }); socket.on('someevent',function(data){ alert(data); }); socket.emit('myevent','hello'); 注意地址是用的http://这里一定不要用ws://。socket.io依托于http模块,从这里也能体现
用于发起http请求:var request=require('request'); var urlencode=require('urlencode'); var data = urlencode(JSON.stringify(jsondata)); var url = 'http://xxxx'+ data; request.post(url, function (err, res, resdata){ JSON.parse(resdata); });