Node.js Express 接收邮递员为空

Posted

技术标签:

【中文标题】Node.js Express 接收邮递员为空【英文标题】:Node.js Express receiving postman as empty 【发布时间】:2016-02-12 07:24:54 【问题描述】:

我正在开发一个简单的网站,但在向 API 发送 JSON 时遇到了问题。如果使用 html/js 发送 JSON,则 JSON 将作为 EMPTY 接收,但使用 postman 时一切正常。

文件的结构只是运行在node.js上的服务器,一个带有他的javascript的html页面来构建JSON并发送它。

html文件代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
<body>
</head>
Receiver Address
<input type="text" placeholder="Write the target address..." id="target_address"></input><br>
Message
<input type="text" placeholder="Write the message in plain text..." id="message"></input><br>
<input type="submit" value="Send" id="accept"></input>
<br>
<div id="results"><div>
</body>
    <script src="js/jquery.js"></script>
    <script src="js/main.js"></script>
</html>

javascript 文件是:

var URL_API = "http://localhost:3000/nr";
$("#accept").click(function(e) 
    e.preventDefault();
    var url = URL_API;
    var object = new Object();
    object.L = 1;
    object.B = ($("#target_address").val());
    object.message =($("#message").val());
    object.po = "ProofofOrigin";
    var data = JSON.stringify(object);
    console.log(data);

    $.ajax(
        url : url,
        type : 'POST',
        crossDomain : true,
        dataType : 'json',
        contentType : 'application',
        data : data,
        dataType:'json',

    ).done(function(data, status, jqxhr) 
            window.alert("Information sent successfully");
    console.log(data.B);
    ).fail(function(data) 
        window.alert("ERROR");

    );
);

然后是接收给定 POST 时正在执行的节点部分:

router.post('/', function(req, res, next) 

  var updateStep = Number(req.body.L)+1;
  var ProofofOrigin = req.body.message + "Message signed - POO";
  var info_JSON = 
    address: req.body.B,
    step:  updateStep,
    message: req.body.message,
    po: req.body.po,
  ;
  JSON.stringify(info_JSON);
  //res.send("Address :  " + req.body.B + " \nStep : " + req.body.L + " \nMessage : " + req.body.C + " \nPOO : " + req.body.Po);
  res.send(info_JSON);
  //console.log(info_JSON);
);

由于某种原因,req.body(应该保存 JSON)在正文中完全是空的,但如果我使用 Postman 发送它,它会起作用。 我不知道可能出了什么问题。

【问题讨论】:

你添加了body-parser吗? github.com/expressjs/body-parser 访问 POST 正文时需要。 设置 contentType: 'application/json' 感谢@Ararat Harutyunyan 这工作 【参考方案1】:

请验证:

在javascript中(客户端):

contentType : 'application/json',

在nodejs中(服务器端):

var express = require('express');
var bodyParser = require('body-parser');

var app = express();
app.use(bodyParser.json());

app.post('/api/doSomething', function(req, res) 
   var mydata = req.body.mydata;
   ...
   return res.json(result: result);
);

您需要包含正文解析器模块才能解析 JSON 正文。

【讨论】:

以上是关于Node.js Express 接收邮递员为空的主要内容,如果未能解决你的问题,请参考以下文章

使用 Express 4 在 Node.js 中解析 JSON 发布请求

Node.js中的express框架获取http参数

Node.js express获取参数有三种方法

如何在 express node.js POST 请求中接收 JSON?

React App 和 node.js 后端 api 安全获取

express