【问题标题】:Node JS: Listening for HTTPS POST JSON RequestsNode JS:监听 HTTPS POST JSON 请求
【发布时间】:2014-07-19 07:31:18
【问题描述】:

我目前有一个网络服务器将信息作为 JSON 有效负载发布给我,并发送到特定的 URL 端点。

规范声明我需要建立一个可以侦听 POST JSON 请求的 HTTPS 服务器。

我已经创建了如下所示的简单 Node JS 监听器。

我可以确认请求正在到达端点,但在记录时,似乎是乱码数据。有人可以告诉我我的脚本中是否缺少阻止 JSON 解码正确发生的参数吗?

var express = require('express');
var http = require('http');
var https = require('https');
var fs = require('fs');
var logger = require('logger');
var bodyParserNew = require('body-parser');
var application_root = __dirname;
var path = require("path");
var util = require('util');

var options = {
  key: fs.readFileSync('./privatekey.pem'),
  cert: fs.readFileSync('./server.crt')
};

var app = express();

app.set('port', process.env.PORT);
app.use(express.static(path.join(__dirname, 'site')));

//listener
app.post('/api/test', function (req, res) {
    var body = '';
    req.on('data', function (data) {
        body += data;
    });
    req.on('end', function () {
        console.log('/api/test');
        console.log(req.body);
    }); 

    res.writeHead(200);
    res.end();
});

https.createServer(options,app).listen(8080);
console.log('listening on server 8080');

我看到的有效载荷片段:

��Qk�0��R��ْ,K????��1$e!Y�Ä��2�����b��n)�e�7��:�ü�F7V���-
�?�3���G��� �
                 9���=#�4��hhv���k��Y�0�%Øq&�mÄ7�i�A�C>��A???h,�����1�5�����2Äe�<�?�����Q��

【问题讨论】:

  • 您正在记录 req.body,但您的 var 与您的累积身体只是 body。如果将console.log(req.body); 更改为console.log(body); 会发生什么?

标签: javascript node.js post express https


【解决方案1】:

尝试将您的 res.writeHead(200); res.end(); 移动到您的 req.on('end') 回调中,否则您会在等待请求数据之前立即发送响应。

此外,您无需手动缓冲请求数据。在路由上方添加app.use(bodyParserNew.json()); 将为您完成此操作并提供包含解析结果的req.body。如果需要,也可以设置一些bodyParser.json() options

【讨论】:

    【解决方案2】:

    我尝试了您的示例,这在我的情况下效果很好。在您的示例中, req.body 应该只是正文。就像 mscdex 所说,您可以使用中间件为您解析 json。这里有适合我的代码(和你的几乎一样):

    var fs = require('fs');
    var express = require('express');
    
    var app = express();
    
    var options = {
        key: fs.readFileSync('./key.pem'),
        cert: fs.readFileSync('./cert.pem')
    };
    
    
    //listener
    app.post('/api/test', function (req, res) {
        var body = '';
        req.on('data', function (data) {
            body += data;
        });
        req.on('end', function () {
            console.log('/api/test');
            console.log(body);
        });
    
        res.writeHead(200);
        res.end();
    });
    
    var https = require('https');
    https.createServer(options, app).listen(443);
    

    【讨论】:

      猜你喜欢
      • 2017-08-11
      • 1970-01-01
      • 2021-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多