使用express.Router()时无法获取/ foo

时间:2019-03-04 19:41:28

标签: node.js express

我试图弄清楚为什么使用expressjs时路由不起作用,我有以下代码:

const express = require('express');
const app = express();
const router = express.Router();

app.get('/foo', function (req, res) {
    res.send('Hello World.')
});

上面的代码运行良好,但是如果我用以下代码替换路由:

router.get('/foo', function(req, res, next) {
    res.send('This is api.')
});

我得到:

  

使用express.Router()时无法获取/ foo

2 个答案:

答案 0 :(得分:1)

您缺少以下内容: app.use(router); 朝着代码的底部。您还需要 app.listen(3000); 或您要在其上运行应用程序的任何端口。

完整示例:

const express = require('express');
const app = express();
const router = express.Router();

router.get('/foo', function (req, res, next) {
    res.send('This is api.')
});

app.use(router);
app.listen(3000);

答案 1 :(得分:1)

您需要正确配置每个路由器才能在Express中使用它。

您需要在根服务器文件(index.js / app.js中向应用注册路由器。例如:

const express = require("express");
const app = express();

const fooRouter = require("./routes/foo");
app.use("/foo", fooRouter);

然后在routes/foo.js中,您可以像以前一样使用代码(“但请注意,此时路由路径将相对于"/foo"是相对的),但是您还需要导出路由器。例如:

const express = require("express");
const router = express.Router();

router.get("/bar", (req, res) => {
    // ...
});

module.exports = router;

最终路线将为"/foo/bar"。对于"/foo",您可以在"/"内为foo.js定义处理程序。