2017-04-22 83 views
1

我想在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参数)。

回答

4

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

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不会是空的,你可以解析它,你通常会。