在Express中查询参数

我想在Node.js中使用Express访问查询参数。 由于某种原因, req.params不断出现作为一个空的对象。 这是我在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文件中的控制台日志显示一个空的主体(不能识别URL中的orderid参数)。

orderid中的请求是查询参数。 它需要通过req.query对象而不是req.params访问。 使用下面的代码来访问在请求中传递的orderid

 const orderID = req.query.orderid 

现在,您应该能够获取请求url中传递的值。

或者尝试replace下面的路由/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 }); }); 

req.body继续成为一个空对象的原因是,在get请求时,比如浏览器在导航上所做的请求,不存在body对象。 在get请求中,查询string包含您尝试访问的orderid。 查询string被附加到URL。 您的代码可以被重写如下:

 routes.get('/scanned', (req, res) => { const orderID = req.query.orderid console.log( req ); res.render('home', { orderID }); }); 

不过请注意,如果您的客户端代码中包含AJAX文章,您的req.body将不会为空,您可以req.bodyparsing它。