这个模块非常强大,以至于现在很少有人会用原生的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);
});