Node.js内置了http模块,因此使用node.js搭建一个http服务非常简单。
一、http实例
照旧,先来一个http的"Hello world!",创建http.js文件,代码如下:
//调用http模块 var http = require('http'); var server = http.createServer(); server.on('request', function(request, response) { // 发送 HTTP 头部 // HTTP 状态值: 200 : OK // 内容类型: text/plain response.writeHead(200, {'Content-Type': 'text/plain'}); // 发送响应数据 "Hello World !" response.end('Hello World !'); }).listen(8000); console.log('Http server is started.');运行http.js:
lee@mypc ~/works/nodejs/study4 $ node http.js Http server is started.
这时可以看到程序打印完"Http server is started"并没有结束,而是一直占据进程(监听8000端口)。
然后我们另起一个terminal,用curl测试http服务:
lee@mypc ~/works/nodejs/study4 $ curl "http://localhost:8000" Hello World !
成功打印出"Hello world !"
二、get请求
创建另一个文件http_get.js。
然后实现逻辑,接收到http请求后先判断request.method,如果不是GET则返回404。如果是GET请求,则用url模块获取参数,并返回接收到的参数。
代码如下:
//调用http模块 var http = require('http'); //调用url模块 var url = require('url'); var server = http.createServer(); server.on('request', function(request, response) { if(request.method == 'GET') { var params = url.parse(request.url, true).query; params = JSON.stringify(params); //服务端打印参数 console.log('Get params:'+params); // 发送 HTTP 头部 // HTTP 状态值: 200 : OK // 内容类型: text/plain response.writeHead(200, {'Content-Type': 'text/plain'}); // 把请求参数返回给客户端 response.end(params+'n'); } else{ response.writeHead(404, {'Content-Type': 'text/plain'}); response.end('Not found !n'); } }).listen(8000); console.log('Http server is started.');
运行http_get.js:
lee@mypc ~/works/nodejs/study4 $ node http_get.js Http server is started.
用curl测试get得到正确结果:
lee@mypc ~/works/nodejs/study4 $ curl "http://localhost:8000?id=1&name=2" {"id":"1","name":"2"}测试post请求则得到"Not found":
lee@mypc ~/works/nodejs/study4 $ curl -d "" "http://localhost:8000" Not found !
三、post请求
创建一个文件http_post.js。
然后实现逻辑,接收到http请求后先判断request.method,如果不是POST则返回404。如果是POST请求,则获取http body,并返回接收到的内容。
代码如下:
//调用http模块 var http = require('http'); var server = http.createServer(); server.on('request', function(request, response) { if(request.method == 'POST') { var data_post = ''; request.on('data', function(data){ data_post += data; }); request.on('end', function(){ //服务端打印参数 console.log('Get body:'+data_post); // 发送 HTTP 头部 // HTTP 状态值: 200 : OK // 内容类型: text/plain response.writeHead(200, {'Content-Type': 'text/plain'}); // 把请求参数返回给客户端 response.end(data_post+'n'); }) } else{ response.writeHead(404, {'Content-Type': 'text/plain'}); response.end('Not found !n'); } }).listen(8000); console.log('Http server is started.');
运行http_post.js:
lee@mypc ~/works/nodejs/study4 $ node http_post.js Http server is started.
用curl测试post得到正确结果:
lee@mypc ~/works/nodejs/study4 $ curl -d '{"username":"lee","id":1}' "http://localhost:8000" {"username":"lee","id":1}
测试get请求则得到"Not found":
lee@mypc ~/works/nodejs/study4 $ curl "http://localhost:8000?id=1&name=2" Not found !