十八、Node.js GET-POST 请求 云少 2020-05-18 2020-05-18 十八、Node.js GET-POST 请求 制作交互式的 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 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 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=world
解析 URL 的参数 Node.js url.parse 方法可以解析 URL 中的参数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 var http = require ('http' );var url = require ('url' );var util = require ('util' );var server = http.createServer (function (req, res ){ 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=hello&name=world
Node.js 获取 POST 请求内容 HTTP POST 请求的内容全部的都在请求体(body) 中
Node.js http 模块没有提供任何一个属性或方法可以获取到请求体,因为等待请求体传输可能是一件耗时的工作
我们只能监听 req 的 on.data 事件,然后获得请求体原文
1 2 3 4 5 6 7 var post = '' ; req.on ('data' , function (chunk ){ post += chunk; });
虽然 Node.js 没有默认解析请求体,但我们可以使用第三方模块来解析他们
querystring 就是这样的一个模块,它可以解析 HTTP POST 上来的内容
1 2 3 req.on ('end' , function ( ){ post = querystring.parse (post); });
通过以上的两个步骤,我们已经能够获得和解析 HTTP POST 的数据
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 39 var http = require ('http' );var querystring = require ('querystring' );var postHTML = '<html><head><meta charset="utf-8"><title>helloworld</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/