在Express中查询参数

时间:2017-04-22 14:47:37

标签: node.js express query-parameters

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

2 个答案:

答案 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将不会为空,您可以像平常一样对其进行解析。