【问题标题】:Express JS (Node): adding the prefix to routes is not workingExpress JS(节点):向路由添加前缀不起作用
【发布时间】:2021-08-18 20:28:14
【问题描述】:

我正在使用 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

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

【问题讨论】:

    标签: node.js express express-router


    【解决方案1】:

    这是因为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;
    

    无法获取 /api/auth

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

    【讨论】:

    • 很高兴听到这个消息! ?
    【解决方案2】:

    你需要使用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);
    
    

    【讨论】:

    • 您好,您是说我需要两个快速路由器实例吗?我已经在使用它了,apiRouter 变量。
    【解决方案3】:

    一开始尽量简单:

    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`);
    });;
    

    【讨论】:

      猜你喜欢
      • 2021-11-08
      • 1970-01-01
      • 2023-04-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-14
      • 2018-04-30
      • 2017-07-01
      • 1970-01-01
      相关资源
      最近更新 更多