文章永久连接:https://tech.souyunku.com/?p=5452
制作交互式的 WEB 网页,才是 HTML 和 HTTP 发展的初衷
HTML 表单(form) 是制作交互式网页最重要的组成部分,用户通过表单提交数据,或是用于查询,或是用于保存,或是请求
HTML 表单提交到服务器一般都使用 GET / POST 请求
本章,我们就来学习在 Node.js 中如何处理 GET / POST 请求
Node.js 获取 GET 请求内容
GET 请求的参数都放在了 HTTP URL 里面的 Query 部分,也就是问号(?) 后面的部分
因此我们可以直接解析 URL 获得请求的数据
Node.js url 模块可以解析 URL 并获得 GET 参数
main.js
/*
* filename: main.js
* author: 搜云库技术团队(tech.souyunku.com)
* Copyright © 2015-2065 tech.souyunku.com. All rights reserved.
*/
var http = require('http');
var url = require('url');
var util = require('util');
var server = http.createServer(function(req, res)
{
res.writeHead(200, {'Content-Type': 'text/plain; charset=utf-8'});
res.end(util.inspect(url.parse(req.url, true)));
}).listen(8080);
var host = server.address().address
var port = server.address().port
console.log("Node.js Express 应用范例,访问地址为 http://%s:%s", host, port)
在浏览器中访问 http://127.0.0.1:8080/?greeting=Hello&name=搜云库技术团队 显示如下
解析 URL 的参数
Node.js url.parse 方法可以解析 URL 中的参数
/*
* filename: main.js
* author: 搜云库技术团队(tech.souyunku.com)
* Copyright © 2015-2065 tech.souyunku.com. All rights reserved.
*/
var http = require('http');
var url = require('url');
var util = require('util');
var server = http.createServer(function(req, res)
{
// 解析 url 参数
var params = url.parse(req.url, true).query;
res.write("网站名:" + params.name);
res.write("\n");
res.write("网站 URL:" + params.url);
res.end();
}).listen(8080);
var host = server.address().address
var port = server.address().port
console.log("Node.js Express 应用范例,访问地址为 http://%s:%s", host, port)
运行以上 Node.js 脚本
然后在浏览器中访问 http://127.0.0.1:8080/?url=tech.souyunku.com&name=搜云库技术团队
显示如下
Node.js 获取 POST 请求内容
HTTP POST 请求的内容全部的都在请求体(body) 中
Node.js http 模块没有提供任何一个属性或方法可以获取到请求体,因为等待请求体传输可能是一件耗时的工作
我们只能监听 req 的 on.data 事件,然后获得请求体原文
// 定义了一个post变量,用于暂存请求体的信息
var post = '';
// 通过 req 的 data 事件监听函数,每当接受到请求体的数据,就累加到post变量中
req.on('data', function(chunk){
post += chunk;
});
虽然 Node.js 没有默认解析请求体,但我们可以使用第三方模块来解析他们
querystring 就是这样的一个模块,它可以解析 HTTP POST 上来的内容
req.on('end', function(){
post = querystring.parse(post);
});
通过以上的两个步骤,我们已经能够获得和解析 HTTP POST 的数据
/*
* filename: main.js
* author: 搜云库技术团队(tech.souyunku.com)
* Copyright © 2015-2065 tech.souyunku.com. All rights reserved.
*/
var http = require('http');
var querystring = require('querystring');
var postHTML =
'<html><head><meta charset="utf-8"><title>搜云库技术团队(souyunku.cn) Node.js 范例</title></head>' +
'<body>' +
'<form method="post">' +
'网站名: <input name="name"><br>' +
'网站 URL: <input name="url"><br>' +
'<input type="submit">' +
'</form>' +
'</body></html>';
var server = http.createServer(function (req, res) {
var body = "";
req.on('data', function (chunk) {
body += chunk;
});
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("网站 URL:" + body.url);
} else { // 输出表单
res.write(postHTML);
}
res.end();
});
}).listen(8080);
var host = server.address().address
var port = server.address().port
console.log("Node.js Express 应用范例,访问地址为 http://%s:%s", host, port)
运行以上 Node.js 脚本
然后在浏览器中访问 http://127.0.0.1:8080/
演示 HTTP POST 提交数据操作如下
干货推荐
附录:Node.js 教程:系列文章
- 一、Node.js 基础教程
- 二、Node.js 环境配置
- 三、Node.js 创建第一个应用
- 四、Node.js NPM 使用介绍
- 五、Node.js 使用淘宝 NPM 镜像
- 六、Node.js REPL ( 交互式解释器 )
- 七、Node.js 回调函数
- 八、Node.js 事件循环
- 九、Node.js EventEmitter
- 十、Node.js Buffer(缓冲区)
- 十一、Node.js Stream (流)
- 十二、Node.js 模块系统
- 十三、Node.js 函数
- 十四、Node.js 开发 URL 路由
- 十五、Node.js 全局对象
- 十六、Node.js 常用工具
- 十七、Node.js 文件系统( fs 模块 )
- 【当前读到】十八、Node.js GET-POST 请求
- 十九、Node.js 内置模块
- 二十、Node.js WEB 模块
- 二十一、Node.js Express 框架
- 二十二、Node.js RESTful API
- 二十三、Node.js 多进程
- 二十四、Node.js JXcore 打包
- 二十五、Node.js 访问 MySQL 数据库
- 二十六、Node.js 访问 MongoDB
- 二十七、Node.js OS 模块
- 二十八、Node.js DNS 模块
- 二十九、Node.js Domain 模块
- 三十、Node.js Path 模块
- 三十一、Node.js Net 模块