Node Http 底层api
下图是Node Web陈程序的内部结构,核心是底层api。
node的http请求会返回request 和response的回调函数,服务器没收到一个新的请求,都会用新的req和res对象触发回调函数,node会解析htt头并放到req中返回,但是默认不会解析body。
需要收到调用res.end()去结束响应,否则会超时或一直处于打开状态。
修改http header
- res.setHeader(field,value)
- res.getHeader(field)
- res.removeHeader(field)
设置http code
res.statusCode = 200/404 ….
todo list demo
var http = require('http');
var url = require('url');
var items = [];
var server = http.createServer(function (req, res) {
console.log(req.method);
switch (req.method) {
case 'POST':
var item = '';
req.setEncoding('utf8');
req.on('data', function (chunk) {
item += chunk;
});
req.on('end', function () {
items.push(item);
res.end('ok \n');
})
break;
case 'GET':
// items.forEach(function (item, i) {
// res.write(i + ')' + item + '\n');
// });
// res.end();
//优化方案
var body = items.map(function (item, i) {
return i + ')' + item;
}).join('\n');
res.setHeader('Content-Length', Buffer.byteLength(body));
res.setHeader('Content-Type', 'text/plain;charset="utf-8"');
break;
case 'DELETE':
var path = url.parse(req.url).pathname;
var i = parseInt(path.slice(1), 10);
if (isNaN(i)) {
res.statusCode = 400;
res.end('Invalid item id');
} else if (!items[i]) {
res.statusCode = 404;
res.end('item not found');
} else {
items.splice(i, 1);
res.end('delete done');
}
break;
}
});
server.listen(3000);
项目地址:https://github.com/KinsomyJS/Node-Journey