felenwe 2015-12-29 2904浏览量
Http是互联网时代使用最广泛的协议,没有之一。
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.');
lee@mypc ~/works/nodejs/study4 $ node http.js
Http server is started.
然后我们另起一个terminal,用curl测试http服务:
lee@mypc ~/works/nodejs/study4 $ curl "http://localhost:8000"
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.');
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}
lee@mypc ~/works/nodejs/study4 $ curl "http://localhost:8000?id=1&name=2"
Not found !
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
集结各类场景实战经验,助你开发运维畅行无忧