Express 中的查询参数
Query parameters in 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
现在您应该能够获得请求中传递的 234
值 url。
或尝试将路线 /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
请求中,例如浏览器在导航时发出的请求,没有正文对象。在 get
请求中,查询字符串包含您尝试访问的 orderid。查询字符串附加到 url。您的代码可以重写如下:
routes.get('/scanned', (req, res) => {
const orderID = req.query.orderid
console.log( req );
res.render('home', {
orderID
});
});
但请注意,如果您的客户端代码中有 AJAX 个帖子触发,您的 req.body
将不会为空,您可以像往常一样解析它。
我正在尝试在 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
现在您应该能够获得请求中传递的 234
值 url。
或尝试将路线 /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
请求中,例如浏览器在导航时发出的请求,没有正文对象。在 get
请求中,查询字符串包含您尝试访问的 orderid。查询字符串附加到 url。您的代码可以重写如下:
routes.get('/scanned', (req, res) => {
const orderID = req.query.orderid
console.log( req );
res.render('home', {
orderID
});
});
但请注意,如果您的客户端代码中有 AJAX 个帖子触发,您的 req.body
将不会为空,您可以像往常一样解析它。