前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Node.js基础9:web服务器2 处理 GET 或 POST 请求发送的数据

Node.js基础9:web服务器2 处理 GET 或 POST 请求发送的数据

作者头像
代码之风
发布2019-04-19 09:34:48
1.8K0
发布2019-04-19 09:34:48
举报
文章被收录于专栏:马涛涛的专栏

处理 GET 或 POST 请求发送的数据

处理GET请求

server中的 request.url会把查询字符串也带过来

解决方法:

使用url库解析, 这样pathname就是查询字符串前面的字符串, url库可以对url进行一些处理,可以取一些主机名,协议之类的数据

例如我们接下来将查询字符串解析为键值对的形式:

server.js

将解析过后的params一层层传到handle里,然后处理

交给/api/v1/records 这条路来处理:直接将这个json字符串转化为对象相应给前端

结果:

var params = url.parse(request.url, true).query;true这个参数代表返回一个JSON对象形式的字符串(本质上是一个字符串),如果是false,就直接返回完整的查询字符串:如下

处理POST

在index.html建一个简单的表单发送post请求先进入index.html,再通过表单进入

代码语言:javascript
复制
<form action="/api/v1/records" method="post">
        name: <input type="text" name="name" /> age: <input type="text" name="age" />
        <input type="submit" value="Submit">
    </form>

注意:url库只能解析get发送的请求 修改代码:

代码语言:javascript
复制
var http = require('http');
var fs = require('fs');
var url = require("url")
var querystring = require("querystring")//querystring用来将post请求中的数据解析为对象
function startServer(route, handle) {
    var onRequest = function(request, response) {
        var pathname = url.parse(request.url).pathname
        console.log('Request received ' + pathname);
        var data = ''
        request.on('error',function(err){
            console.error(err)
        }).on('data',function(chunk){
            data+=chunk
        }).on('end',function(){
            if(request.method === "POST") {//如果是post请求,就这样处理,还是那传过来的数据都转化为对象,再丢给handle
                route(handle, pathname, response, querystring.parse(data));//这里将post请求发送来的数据解析为json对象的形式
            }else if(request.method === "GET"){//如果是get请求
                var params = url.parse(request.url, true).query;//转化为一个json对象(本质上是对象)
                route(handle, pathname, response, params);//拿到查询字符串
            }
        })
    }

    var server = http.createServer(onRequest);

    server.listen(3000, '127.0.0.1');
    console.log('Server started on localhost port 3000');
}

module.exports.startServer = startServer;

post和get请求都ok

优化一下程序:

代码语言:javascript
复制
var http = require('http');
var fs = require('fs');
var url = require('url');
var querystring = require('querystring');

function startServer(route, handle) {
    var onRequest = function(request, response) {
        var pathname = url.parse(request.url).pathname;
        console.log('Request received ' + pathname);
        var data = [];//将data声明为数组,
        request.on("error", function(err) {
            console.error(err);
        }).on("data", function(chunk) {
            data.push(chunk);//
        }).on('end', function() {
            if (request.method === "POST") {
                if (data.length > 1e6) {//判断长度,及时取消响应
                    request.connection.destroy();
                }
                data = Buffer.concat(data).toString();//使用流
                route(handle, pathname, response, querystring.parse(data));
            } else {
                var params = url.parse(request.url, true).query;
                route(handle, pathname, response, params);
            }
        });
    }

if (data.length > 1e6)科学计数法,如果数据量很大,就把请求取消,不然会增加服务器的负载,使服务器宕机

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 处理 GET 或 POST 请求发送的数据
    • 处理GET请求
      • 处理POST
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档