我正在尝试使用Node.js中的Express访问查询参数。出于某种原因,server.js
不断出现为空对象。这是const express = require('express');
const exphbs = require('express-handlebars');
const bodyParser = require('body-parser');
const https = require('https');
//custom packages ..
//const config = require('./config');
const routes = require('./routes/routes');
const port = process.env.port || 3000;
var app = express();
//templating engine Handlebars
app.engine('handlebars', exphbs({defaultLayout: 'main'}));
app.set('view engine', 'handlebars');
//connect public route
app.use(express.static(__dirname + '/public/'));
app.use(bodyParser.json());
//connect routes
app.use('/', routes);
app.listen(port, () => {
console.log( 'Server is up and running on ' + port );
});
中的代码:
//updated
const routes = require('express').Router();
routes.get('/', (req, res) => {
res.render('home');
});
routes.post('/scan', (req, res) => {
res.status(200);
res.send("hello");
});
routes.get('/scanned', (req, res) => {
const orderID = req.params;
console.log( req );
res.render('home', {
orderID
});
});
module.exports = routes;
这是我的路线档案:
http://localhost:3000/scanned?orderid=234
当服务器启动并运行时,我正在导航到routes.js
。我目前在orderid
文件中的控制台日志显示空主体(不识别URL中的$("tr.clickAction> td:not(:nth-child(1), :nthchild(2))").on("click",function()
{
document.location = 'http://www.google.com';
});
参数)。
答案 0 :(得分:8)
orderid
是查询参数。它需要通过req.query
对象访问,而不是req.params
。使用以下代码访问请求中传递的orderid
:
const orderID = req.query.orderid
现在,您应该能够在请求网址中传递234
值。
或尝试使用以下代码替换路由/scanned
的代码:
routes.get('/scanned', (req, res) => {
const orderID = req.query.orderid
console.log( orderID ); // Outputs 234 for the sample request shared in question.
res.render('home', {
orderID
});
});
答案 1 :(得分:1)
req.body
作为一个空对象不断出现的原因是get
请求,例如浏览器在导航时发出的请求,没有正文对象。在get
请求中,查询字符串包含您尝试访问的orderid。查询字符串将附加到URL。您的代码可以重写如下:
routes.get('/scanned', (req, res) => {
const orderID = req.query.orderid
console.log( req );
res.render('home', {
orderID
});
});
但是,请注意,如果您在客户端代码中触发了AJAX帖子,则req.body
将不会为空,您可以像平常一样对其进行解析。