在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.body
parsing它。