Express JS(节点):向路由添加前缀不起作用

Express JS (Node): adding the prefix to routes is not working

我正在使用 Node JS Express JS 框架构建 Web 应用程序。现在,我正在尝试为我的应用程序的所有路由添加一个前缀。但它不起作用。

我就是这样做的。

let express = require('express');
let app = express();
const apiRouter = express.Router()

apiRouter.use('/api', () => {
  app.get('/auth', (req, res) => {
    res.send("Auth route")
  })

  return app;
})

当我在浏览器中转到“/api/auth”时,没有得到预期的响应。我收到以下错误。

Cannot GET /api/auth

我的代码有什么问题,我该如何解决?

您需要使用express.Router

https://expressjs.com/en/guide/routing.html#express-router


const router = express.Router();
router.get('/auth', (req, res) => {
  res.send("Auth route");
});

apiRouter.use('/api', router);

这是因为app.use是在你的请求中添加中间件(针对你为特定路径添加的特定请求)并通过匹配它的确切路径来响应。您可以阅读更多详细信息here 这是一个非常详细的线程。

let express = require('express');
let app = express();
const apiRouter = express.Router();

//create route file which will handle the exact match for it;
const apiRouteHandler = require('path');

app.use('/api', apiRouteHandler)

样本apiRouteHandler

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

router.get('/auth', function(req, res){
   res.send('GET route on things.');
});

//export this router to use in our index.js
module.exports = router;

Cannot GET /api/auth

出现此错误是因为应用程序无法在任何地方匹配此路由,因为在中间件中 app.get 我们不会像这样调用。您需要为此创建一个路由处理程序,然后 express 的路由机制将传​​递给路由文件中的正确处理程序。

一开始尽量简单:

let express = require('express');
let app = express();
const apiRouter = express.Router();

apiRouter.get('/auth', (req, res) => {
  // handle GET /auth method
  res.send("Auth route");
});

// register handle for any request with Endpoint like /api/* (api/"anything include auth")
app.use('/api', apiRouter);

app.listen(3000, () => {
  console.log(`Server started on port`);
});;