【问题标题】:Getting POST parameters not working获取 POST 参数不起作用
【发布时间】:2019-02-20 07:03:07
【问题描述】:

我正在尝试使用 PostMan 使用 restify 框架发送一个帖子参数(键:test,值:somevlaue)。为此,我使用了 2 种方法,但都不起作用:

第一个显示此错误:

{
  "code": "InternalError",
  "message": "Cannot read property 'test' of undefined"
}

第二个(已注释)仅显示错误:someerror

我做错了吗?

这是我的代码:

var restify=require('restify');
var fs=require('fs');
var qs = require('querystring');
var bodyParser = require('body-parser');
var urlencodedParser = bodyParser.urlencoded({ extended: false })
var controllers = {};

var server=restify.createServer();

server.post("/get", function(req, res, next){
    res.send({value: req.body.test,
     error: "someerror"});

    //**********METHOD TWO*********************

/*
     if (req.method == 'POST') {
         var body = '';

         req.on('data', function (data) {
             body += data;
         });

         req.on('end', function () {
             var post = qs.parse(body);
             res.send({
                 Data: post.test,
                 Error: "Someerror"
             });
         });
     }
     */

});
server.listen(8081, function (err) {
    if (err)
        console.error(err);
    else
        console.log('App is ready at : ' + 8081);
});

【问题讨论】:

  • 在您的邮政编码中检查过数据。 reqreq.bodyreq.body.test?它们都是未定义的还是返回一些值?
  • 那你是怎么发帖的呢?
  • 勾选后req显示为长URL类型的东西(不知道是什么),req.body为[object Object]
  • @epascarello 我正在使用 PostMan 为其提供表单参数
  • "正在尝试使用 PostMan 发送一个帖子参数(键:test,值:somevlaue) - 你是如何配置它的?你发送的是什么内容类型?

标签: javascript node.js express restify


【解决方案1】:

使用 restify ^7.7.0,您不再需要 require('body-parser')。只需使用 restify.plugins.bodyParser():

var server = restify.createServer()
server.listen(port, () => console.log(`${server.name} listening ${server.url}`))
server.use(restify.plugins.bodyParser()) // can parse Content-type: 'application/x-www-form-urlencoded'
server.post('/your_url', your_handler_func)

【讨论】:

    【解决方案2】:

    您的bodyparser 似乎设置不正确。 根据正文解析器部分下的the docs,您以这种方式设置解析器:

    server.use(restify.bodyParser({
        maxBodySize: 0,
        mapParams: true,
        mapFiles: false,
        .....
     }));
    

    默认是将数据映射到req.params,但您可以通过将mapParams 选项设置为false 来更改此设置并将其映射到req.body

    BodyParser

    在读取和解析 HTTP 请求正文时阻止您的链。 打开 Content-Type 并执行适当的逻辑。 应用程序/json、应用程序/x-www-form-urlencoded 和 目前支持 multipart/form-data。

    【讨论】:

    • 抱歉,页面现在没有加载。
    • 您是否删除了var bodyParser = require('body-parser');,您是否遇到任何错误
    • 我没有删除它。我要删除它吗?
    • 我不确定,但我想是的,看起来 restify 有自己的bodyParser。您是否按照教程进行设置?
    • 嘿,看来我明白了。当我将其更改为 x-www-form-url 时,我得到了我想要的响应。
    猜你喜欢
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 2016-02-19
    • 1970-01-01
    • 1970-01-01
    • 2015-06-09
    • 1970-01-01
    相关资源
    最近更新 更多