[Node.js]笔记#1Web模块_收发GET_POST

2022-5-16 18:45| 发布者: Hocassian| 查看: 63| 评论: 0|原作者: 神代綺凜

摘要:
C:\Users\Administrator\Downloads\神代綺凜\2019-10-15-14-34-56-19827330322800-文章归档 - 神代綺凜の萌化小基地-采集的数据-后羿采集器.html

标题

[Node.js] 笔记#1 Web 模块 | 收发 GET/POST

标题链接

https://moe.best/nodejs-memo/web-get-post.html

正文

最近开始学 Node.js 了,写一写笔记,稍微记一下菜鸟教程上没有细讲的内容以及自己摸索的经验来巩固一下

这篇笔记包含 Web 模块的基本使用以及收发 GET/POST 请求的方法

Head Pic: 「無題」/「かるまゆ」[pixiv]

Node.js Web 模块

作服务端,接收请求

GET

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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事件的回调函数来处理余下的任务

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//如果需要发送 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()会简单很多

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
//如果需要发送 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;
搬瓦工VPS优惠套餐,建站稳如狗,支持支付宝,循环出账94折优惠码BWH26FXH3HIQ
年付$28CN2线路,1核/512M内存/10G硬盘/500GB@1Gbps【点击购买】(经常售罄,请抓紧机会)
年付$47CN2线路,1核/1G内存/20G硬盘/1T@1Gbps【点击购买
最后修改:2018 年 02 月 11 日 04 : 23 PM
如果觉得我的文章对你有用,请随意赞赏

文章信息

中二病患者: 神代綺凜  发布时间:2018 年 02 月 11 日  2065 次浏览   暂无评论  2969 字数 分类: Node.js 笔记


路过

雷人

握手

鲜花

鸡蛋

最新评论

返回顶部