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]
相关文章推荐
- node.js学习笔记——学生信息管理的实现(把功能模块化)使用官方提供的http模块实现
- node.js学习笔记(二)--使用mongoose简单的CRUD操作及测试模块mocha的使用
- Node.js学习笔记2【核心模块】
- Node.js学习笔记【1】入门(服务器JS、函数式编程、阻塞与非阻塞、回调、事件、内部和外部模块)
- node.js模块学习(三) http
- node.js 基础学习笔记3 -http
- 【Node.js学习笔记1--模块 npm】
- Node.js学习笔记3【核心模块--event】
- node.js学习笔记之模块调用
- Node.js学习笔记--引用模块、npm
- node.js学习笔记之HTTP---发送服务器端响应流
- Node.js学习笔记_模块调用
- NODE.JS学习笔记——CRYPTO 加密模块
- Node.js中的模块机制学习笔记
- node.js学习笔记之HTTP获取客户端请求信息
- node.js学习笔记之HTTP客户端
- node.js学习笔记(8)--multer模块文件上传
- node.js学习笔记之常用模块介绍
- node.js学习笔记-模块module
- Node.js学习笔记4【核心模块--fs】