首页 文章

无法在快速js节点中获取请求有效负载

提问于
浏览
-1

这是我的Node Express代码,

(function () {
    'use strict';
    var fs = require('fs');
    var cors = require('cors');
    var bodyParser = require('body-parser');
    var express = require('express'),
        app = express(),
        port = 8112;


    app.use(cors());
    app.use(bodyParser.urlencoded({ extended: true }));
    app.use(bodyParser.json());
    app.listen(port);


    app.route('/abc')
        .post(abc);


    function abc(req,res){
        console.dir(req.body);
        res.header("Access-Control-Allow-Origin", "*");
        res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
        res.sendStatus(200);
    }

})();

但我得到了请求机构

{}

但在Chrome浏览器的网络标签中,我可以看到请求有效负载 . 请注意在此POST调用之前触发了OPTIONS .

请求标头

POST /abcHTTP/1.1主机:localhost:8112连接:keep-alive内容长度:11 Pragma:no-cache Cache-Control:no-cache原产地:http:// localhost:4200 User-Agent:Mozilla / 5.0( Windows NT 10.0; Win64; x64)AppleWebKit / 537.36(KHTML,与Gecko一样)Chrome / 66.0.3359.181 Safari / 537.36 x-api-key:CExkxDlFC35ckfCGX6m61x76GxIYH2h2Iv8bX874内容类型:text / plain; charset = UTF-8接受:/ Referer: http:// localhost:4200 / dashboard Accept-Encoding:gzip,deflate,br Accept-Language:en-US,en; q = 0.9

Request Payload

{“dd”:“dd”}

4 回答

  • 3

    您需要发送: Content-Type: application/json for bodyParser.json() 才能工作,没有它,您的JSON有效负载赢了't be parsed, that' s为什么会得到: {}

    来自docs

    bodyParser对象公开了各种工厂以创建中间件 . 当Content-Type请求标头与type选项匹配时,所有中间件将使用已解析的主体填充req.body属性;如果没有要解析的主体,则不会匹配Content-Type,或者空对象({})发生错误 .

    使用 .fetch 的示例:

    fetch('http://localhost:4200/dashboard', {
        method: 'POST',
        headers: {
          'Content-Type': 'application/json'
        },
        body: JSON.stringify({dd: 'dd'})
    });
    
  • 0

    您的内容类型 Headers 是text / plain . 请尝试更换

    app.use(bodyParser.json());
    

    app.use(bodyParser.text());
    
  • 0

    嗨@Pradhaban Nandhakumar,我认为你必须将数据作为行数据传递 . 请尝试以下代码段 .

    You should always pass raw data .

    app.post('/users', (req, res) => { res.send(req.body); });

  • 0

    您正在发布纯文本字符串而不是JSON . 考虑向我们展示您如何发布数据(jQuery,Fetch API等) .

    只需要指定

    headers: {
      'Accept': 'application/json',
      'Content-Type': 'application/json'
    }
    

    在您的请求标头(前端) . 然后,Express正文解析器应该能够检测到有效的JSON并打印结果 . 请注意, Accept 不是必需的,但它指示服务器客户端理解并接受JSON响应 .

    或者,在前端使用像Easy Fetch这样的简单库来管理服务器端调用,而无需处理响应解析或标头设置 .

相关问题