我无法从json请求中获取数据

时间:2019-06-02 21:56:05

标签: node.js json express

我发送JSON数据以路由:

 const data=[{name:this.name}]
                //qs.stringify(payload)
                axios
                    .post('/users',{name:this.name})
                    .then(
                        response => {
                               console.log(response.data);
                        }
                    )
                    .catch(
                        // error=>console.log(error)
                    )

并尝试获取数据:

router.post('/', function (req, res, next) {
        var data = req.body; // here is your data
        var obj=JSON.parse(data);
        console.log(obj.toString());
        res.toString("ok");
    });

我得到了错误500。 为什么不获取数据?

1 个答案:

答案 0 :(得分:0)

您的客户端代码很好,除了名为data的常量完全未使用。但是,在服务器端,req.body几乎可以肯定包含一个已解析的JSON对象(前提是您已经包含一个主体解析中间件)。如果您尚未包含任何正文解析中间件,则req.body将是undefined

此外,toString()中的res方法不会发送任何响应,它只是返回响应的字符串表示形式。

您需要对代码进行以下更改:

  1. 如果尚未将主体解析中间件(例如body-parser)包含到您的快速中间件链中,则为其中。

  2. 请勿致电JSON.parse(req.body)body-parser已经做到了。再次调用只会抛出异常,并返回500。

  3. 要将对象转换为JSON字符串,请使用JSON.stringify()方法。 obj.toString()可能只会返回[object Object]

  4. 使用.send()上的.json().end()res方法之一发送响应。由于您需要发回一个字符串,因此res.send("ok")似乎最合适。

更改后的代码应如下所示:

router.post('/', function (req, res, next) {
    var data = req.body; // here is your data
    console.log(JSON.stringify(data));
    res.send("ok");
});