我正在运行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转到/
我做错了什么?
答案 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
,以便了解您的选择。