您的位置:首页 > 理论基础 > 计算机网络

Node.js学习笔记(3、http模块)

2014-01-29 16:23 911 查看

实例:搭建一个HTTP服务器

使用Node.js搭建HTTP服务器非常简单。

var http = require('http');

http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end('Hello World\n');
}).listen(8080);

console.log('Server running on port 8080.');

第一行 var http = require("http"),表示加载http模块。然后,调用http模块的createServer方法,创造一个服务器实例,将它赋给变量app。

ceateServer方法接受一个函数作为参数,该函数的req参数是一个对象,表示客户端的HTTP请求;res参数也是一个对象,表示服务器端的HTTP回应。rese.writeHead方法表示,服务器端回应一个HTTP头信息;response.end方法表示,服务器端回应的具体内容,以及回应完成后关闭本次对话。最后的listen(8080)表示启动服务器实例,监听本机的1337端口。

将上面这几行代码保存成文件app.js,然后用node调用这个文件,服务器就开始运行了。

node app.js

这时命令行窗口将显示一行提示“Server running at port 8080.”。打开浏览器,访问http://localhost:8080,网页显示“Hello world!”。

将app.js稍加修改,就可以做出一个网站的雏形,请求不同的网址,会显示不同的内容。

var http = require("http");

http.createServer(function(req, res) {

// 主页
if (req.url == "/") {
res.writeHead(200, { "Content-Type": "text/html;charset=utf-8" });
res.end("欢迎来到 homepage!");
}

// About页面
else if (req.url == "/about") {
res.writeHead(200, { "Content-Type": "text/html;charset=utf-8" });
res.end("欢迎来到 about page!");
}

// 404错误
else {
res.writeHead(404, { "Content-Type": "text/plain" });
res.end("404 error! File not found.");
}

}).listen(8080, "localhost");


处理POST请求

当客户端采用POST方法发送数据时,服务器端可以对data和end两个事件,设立监听函数。

var http = require('http');

http.createServer(function (req, res) {
var content = "";

req.on('data', function (chunk) {
content += chunk;
});

req.on('end', function () {
res.writeHead(200, {"Content-Type": "text/plain"});
res.write("You've sent: " + content);
res.end();
});

}).listen(8080);


data事件会在数据接收过程中,每收到一段数据就触发一次,接收到的数据被传入回调函数。end事件则是在所有数据接收完成后触发。

发出请求:request方法

request方法用于发出HTTP请求。

var http = require('http');

//The url we want is: 'www.random.org/integers/?num=1&min=1&max=10&col=1&base=10&format=plain&rnd=new'
var options = {
host: 'www.random.org',
path: '/integers/?num=1&min=1&max=10&col=1&base=10&format=plain&rnd=new'
};

callback = function(response) {
var str = '';

//another chunk of data has been recieved, so append it to `str`
response.on('data', function (chunk) {
str += chunk;
});

//the whole response has been recieved, so we just print it out here
response.on('end', function () {
console.log(str);
});
}

var req = http.request(options, callback);

req.write("hello world!");
req.end();

request对象的第一个参数是options对象,用于指定请求的域名和路径,第二个参数是请求完成后的回调函数。

如果使用POST方法发出请求,只需在options对象中设定即可。

var options = {
host: 'www.example.com',
path: '/',
port: '80',
method: 'POST'
};


指定HTTP头信息,也是在options对象中设定。

var options = {
headers: {'custom': 'Custom Header Demo works'}
};


搭建HTTPs服务器

搭建HTTPs服务器需要有SSL证书。对于向公众提供服务的网站,SSL证书需要向证书颁发机构购买;对于自用的网站,可以自制。

自制SSL证书需要OpenSSL,具体命令如下。

openssl genrsa -out key.pem
openssl req -new -key key.pem -out csr.pem
openssl x509 -req -days 9999 -in csr.pem -signkey key.pem -out cert.pem
rm csr.pem


上面的命令生成两个文件:ert.pem(证书文件)和 key.pem(私钥文件)。有了这两个文件,就可以运行HTTPs服务器了。

var https = require('https');
var fs = require('fs');

var options = {
key: fs.readFileSync('key.pem'),
cert: fs.readFileSync('cert.pem')
};

var a = https.createServer(options, function (req, res) {
res.writeHead(200);
res.end("hello world\n");
}).listen(8000);


上面代码显示,HTTPs服务器与HTTP服务器的最大区别,就是createServer方法多了一个options参数。运行以后,就可以测试是否能够正常访问。

curl -k https://localhost:8000[/code] 
                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: