如何在Express中解析HTTP POST请求?

3
我正在使用expressjs构建我的第一个node.js网站。
其中的一部分是处理来自Fitbit的通知,并将其发送到我的网站上的一个端点/api/1/fitbit_update,就像这样一个通知:
POST /api/1/fitbit_update HTTP/1.1
Host: myhost.dk
Content-Type: multipart/form-data; boundary=JGUOAeGT3Fjgjcdk6s35F2mPVVyTdzgR
Content-Length: 374
Connection: keep-alive

--JGUOAeGT3Fjgjcdk6s35F2mPVVyTdzgR
Content-Disposition: form-data; name="updates"; filename="update1353963418000.json"
Content-Type: application/json; charset=UTF-8
Content-Transfer-Encoding: binary

[{"collectionType":"activities","date":"2012-11-26","ownerId":"qw12er23","ownerType":"user","subscriptionId":"112233-activities"}]
--JGUOAeGT3Fjgjcdk6s35F2mPVVyTdzgR--

我需要解析HTTP请求体中的JSON对象,但Express无法帮助我完成这个任务。
你有什么想法可以获得JSON对象吗?
我看到了一些中间件示例,但我不确定如何通过req.on('someevent')方法实际获取内容。 req.body返回一个空对象{}。
4个回答

3

所以这个请求是一个多部分文件上传,你感兴趣的文件是一个JSON文档。查看express多部分示例。你需要做以下操作:

  • 读取连接保存在req.files.updates.path中的文件
  • 使用JSON.parse将该JSON数据解析为对象

0

添加 express.bodyParser()

对于旧版本:

app.express.createServer(
  express.cookieParser(), 
  express.bodyParser(), 
  ..... 
);

对于更新版本:

server.use(express.bodyParser());

然后您可以使用 req.body 访问 body


我已经在其他POST处理程序中成功使用了bodyParser,但是这个HTTP负载是签名的,看起来有点奇怪,所以可能是这个原因。 - Christian Dalager

0

通过POST方法从表单发送的值:电子邮件和密码

app.post('/login', function(req, res){

    /* Get Errors of Validates */
    var errors = [];
    req.onValidationError(function(msg) {
        errors.push(msg);
        //console.log('msg: ' + msg);
        return this;
    });

    /* Validates */
    req.sanitize('email').xss();
    req.sanitize('password').xss();

    req.assert('email', 'Range email').len(6, 40);
    req.assert('password', 'Range password').len(6, 20);

    //*****************************************************
    // Value Send Post "password" --> req.body.password 
    //*****************************************************
    var pass_shasum = crypto.createHash('sha256').update(req.body.password).digest('hex');  

....

敬礼。


HTTP负载中没有数据参数,因此该方法不起作用。 - Christian Dalager

0
尝试在 POST 路由处理程序中使用 req.body

无法工作。返回{}。我想这可能是签名有效载荷的问题。 - Christian Dalager

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接