我目前有一个网络服务器,它将信息作为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��
答案 0 :(得分:1)
尝试在res.writeHead(200); res.end();
回调中移动req.on('end')
,否则您会在等待请求数据之前立即发送回复。
此外,您不需要手动缓冲请求数据。在路由上方添加app.use(bodyParserNew.json());
将为您执行此操作并提供包含已解析结果的req.body
。如果需要,您还可以设置一些bodyParser.json() options。
答案 1 :(得分:0)
我试过你的例子,这在我的情况下运作得很好。在你的例子中,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);