我写了一个HTTPS NodeJS服务器(带有自签名证书),我想从cURL CLI接收和处理POST请求。
我的服务器:
var https = require('https');
var fs = require('fs');
var config = require('./conf.json');
var g3updater_kernel = require('./g3updater_kernel');
var express = require('express');
var app = express();
var privateKey = fs.readFileSync(config.security_repository+'/CA/rootCA.key', 'utf8');
var certificate = fs.readFileSync(config.security_repository+'/CA/rootCA.pem', 'utf8');
var httpsOptions = {
key: privateKey,
cert: certificate
}
app.post('/', function(req, res){
console.log(req.query);
});
https.createServer(httpsOptions, app).listen(443);
我使用cURL命令:
curl -d M=1 https://localhost/ -k
问题是我收到一个空查询。 console.log(req.query)
显示:
{}
我在查询中遗漏了哪些内容?
答案 0 :(得分:1)
为了解析您的帖子请求中的查询,您将要使用body-parser。
在Express 4中,有意识地决定将bodyParser和CookieParser移动到单独的模块中。
为了访问您的查询,您的代码应该类似于:
var https = require('https');
var fs = require('fs');
var config = require('./conf.json');
var g3updater_kernel = require('./g3updater_kernel');
var express = require('express');
var bodyParser = require('body-parser');
var app = express();
var privateKey = fs.readFileSync(config.security_repository+'/CA/rootCA.key', 'utf8');
var certificate = fs.readFileSync(config.security_repository+'/CA/rootCA.pem', 'utf8');
var httpsOptions = {
key: privateKey,
cert: certificate
}
// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: false }))
// parse application/json
app.use(bodyParser.json())
app.post('/', function(req, res){
console.log(req.body);
});
https.createServer(httpsOptions, app).listen(443);
请注意,它们将保存在req.body而不是req.query。
快乐的编码!