带有 id 的 express 路由器

Rik*_*ard 3 node.js express

我知道我可以在 Express 中做到这一点:

app.use('/:id', function (req, res){ // or app.get
    console.log('Test param: ' + req.params.id); // "Test param: foo"
});
Run Code Online (Sandbox Code Playgroud)

获取我的 url 参数。

当我尝试使用路由器逻辑时,我做了:

索引.js

var sites = require('./routes/sites');
app.use('/:id', sites);
Run Code Online (Sandbox Code Playgroud)

路线/sites.js

var express = require('express');
var router = express.Router();

router.get('/', function(req, res, next) {
    console.log(req.params.id); // logs "undefined"
    // etc ...
});

module.exports = router;
Run Code Online (Sandbox Code Playgroud)

这个逻辑不起作用,我进入{}了 shell 命令,undefined对于req.params.id.

知道我的逻辑哪里错了吗?

Yur*_*bin 7

它不起作用,因为这不是 express 与其Routers交互的方式。您没有id在路由器内部看到的原因是因为:id未在其范围内声明。你需要做类似的事情

app.use('/', sites);
Run Code Online (Sandbox Code Playgroud)

并在您的路由器中

var express = require('express');
var router = express.Router();

router.get('/:id', function(req, res, next) {
    console.log(req.params.id); 
    // etc ...
});

module.exports = router;
Run Code Online (Sandbox Code Playgroud)

此外,您可以尝试app.param()查看文档以获取示例http://expressjs.com/api.html#app.param