Express中的查询参数

3

我正在尝试使用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参数)。

2个回答

8

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

const orderID = req.query.orderid

现在你应该能够在请求URL中传递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
< p > req.body 一直为空对象的原因是,在像浏览器导航这样的 get 请求中,不存在 body 对象。在 get 请求中,查询字符串包含您要访问的 orderid。查询字符串附加到 URL 上。您的代码可以重写如下:

routes.get('/scanned',  (req, res) => {

    const orderID = req.query.orderid
    console.log( req );

    res.render('home', {
        orderID
    });
});

需要注意的是,如果您的客户端代码中有AJAX请求,那么您的req.body将不会为空,您可以像通常一样解析它。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接