最近开始学 Node.js 了,写一写笔记,稍微记一下菜鸟教程上没有细讲的内容以及自己摸索的经验来巩固一下
这篇笔记包含 Web 模块的基本使用以及收发 GET/POST 请求的方法
Head Pic: 「無題」/「かるまゆ」[pixiv]
Node.js Web 模块
作服务端,接收请求
GET
var http = require('http');
var url = require('url');
var util = require('util');
// req请求 res返回
http.createServer(function(req, res){
//writeHeader(状态码,响应头属性)
res.writeHeader(200, {'Content-Type':'text/html;charset=UTF-8'});
//解析 url 参数
//parse() 将字符串转成对象,例如 req.url="/?url=123&name=321"
//true:params 将是一个含有属性的对象{url:"123",name:"321"}
//false:params 将是字符串"url=123&name=321"
var params = url.parse(req.url, true).query;
//使用 write() 向返回页面中输出内容
res.write(params.url);
res.write("<br>");
res.write(params.name);
//使用 end() 结束输出,必须要有 end()
//可以带上参数:end("xxxxxx"),表示输出此内容之后结束输出
res.end();
}).listen(8080); //监听端口
POST
接收 POST 请求与 GET 请求不一样的一点就是,接收 POST 必须通过请求(req)的data
事件来获取 POST 数据,然后通过end
事件的回调函数来处理余下的任务
var http = require('http');
var querystring = require('querystring');
http.createServer(function (req, res) {
//暂存请求体信息
var body = "";
//每当接收到请求体数据,累加到post中
req.on('data', function (chunk) {
//一定要使用+=,如果body=chunk,因为请求favicon.ico,body会等于{}
body += chunk;
});
//数据接受完后,通过 querystring.parse 将 post 解析为真正的 POST 请求格式
req.on('end', function () {
//将一个字符串反序列化为一个对象
body = querystring.parse(body);
res.writeHead(200, {'Content-Type':'text/html;charset=utf8'});
if(body.name && body.url) { // 输出提交的数据
res.write(body.name);
res.write("<br>");
res.write(body.url);
} else {
res.write("xxxxxxx");
}
res.end();
});
}).listen(8080);
作为客户端,发送请求并获取返回
GET
//如果需要发送 HTTPS 请求,则需要 require('https')
var http = require('http');
//发送 GET 请求 get(URL,回调函数)
http.get('http://xxx.xx', function(res) {
//储存返回的 HTML 内容
var html = '';
//每收到一段数据就 += 一次
res.on('data', function(data) {
html += data;
});
//收到所有 HTML 内容后
res.on('end', function() {
//TODO
});
});
POST
实际上上面的 GET 请求也可以用这里 POST 请求的方式来写,即使用http.request()
而不是http.get()
,但是直接用get()
会简单很多
//如果需要发送 HTTPS 请求,则需要 require('https')
var http = require('http');
var querystring = require('querystring');
//POST 参数,直接写成一个对象
var contents = querystring.stringify({
name:'Jindai Kirin',
email:'jindaikirin@ykilin.moe',
address:'lolico.moe'
});
//请求选项
var options = {
host:'lolico.moe',
path:'/xxx/xxx',
method:'POST',
headers:{
'Content-Type':'application/x-www-form-urlencoded',
'Content-Length':contents.length
}
}
var req = http.request(options, function(res){
var html = '';
res.setEncoding('utf8');
res.on('data',function(data){
html += data;
});
res.on('end', function() {
//TODO
});
});
//发送请求
req.write(contents);
req.end;
版权声明:本文为原创文章,版权归 神代綺凜 所有。
本文链接:https://moe.best/nodejs-memo/web-get-post.html
所有原创文章采用 知识共享署名-非商业性使用 4.0 国际许可协议 进行许可。
您可以自由的转载和修改,但请务必注明文章来源并且不可用于商业目的。