Express 4路线未命中

时间:2016-05-26 21:44:06

标签: node.js express

我正在运行Express 4.在app.js里面我得到了:

var products = require('./routes/products');
var app = express();
app.use('/products', products);

然后,在路线/产品中:

router.get('/', function(req, res) {
    //Some Code. Ok
});

router.get('/:code', function(req, res) {
    //Some code. Not hit
});

我的问题是,在使用code参数调用时,第二个路径永远不会被命中,它总是命中/

http://localhost:3000/products?code=123转到/

我做错了什么?

2 个答案:

答案 0 :(得分:1)

router.get('/:code', ...)

匹配

之类的路线
http://localhost:3000/123

router.get()路由匹配URL中的内容,而不是查询字符串中的内容。要将http://localhost:3000/products?code=123作为路线处理,您应该执行以下操作:

router.get('/products', ...)` 

然后在您的路由处理程序中检查查询字符串以查看code具有的值。

 router.get('/products', function(req, res) {
      // access req.query.code here to get the value of `?code=123
      console.log(req.query.code);         // 123
 });

req.query here的快速文档。

答案 1 :(得分:1)

正如我在评论中提到的那样,编写路由器的方式,你会像http://localhost:3000/product/123一样调用它,这会导致值"123"在{{1}的处理程序中可用}。

要执行您想要执行的操作,您将使用已定义的第一个路由器,该路由器已绑定到您的应用的req.params.code路径。

/products

基本上:router.get('/', function(req, res) { if (req.query.code !== undefined) { // do something here if there was a parameter } else { // your original '/products' code here... //Some Code. Ok } }); 用于编码到主URL中的参数(即在'?'的左侧),而req.params用于提取的查询字符串参数。

您可以阅读更多关于req.query如何工作的信息 - 即它将查询字符串提取到express doc for it上的req.query对象的方式。另外值得阅读req.params,以便了解您的选择。