【问题标题】:How can I set the routes correctly?如何正确设置路线?
【发布时间】:2023-06-16 20:41:01
【问题描述】:

这是一个示例代码:

    var x = require('./folder/usefile');

    var Auth = passport.authenticate('jwt', { session: false });

    module.exports = function(app){
    console.log('inside function(app)'); //line 1 executed!

    var player = express.Router();
    var finalRun = express.Router();

    app.use('/api/usefile',player);

    player.get('/', Auth, x.login);

    player.post('/post', Auth, function(req, res){
      x.register});

    app.use('/api',finalRun);
console.log('inside api'); //line 2 is executed!
    }

usefile 中存在我的登录功能,该功能已导出。

我在这里使用的是护照,其功能在此处的单独文件中提供,仅用于身份验证。

当我为get 方法运行http://localhost:8080/api/usefile/---> 时,它显示404。post 方法相同。

控制台正在打印第 1 行和第 2 行(在 cmets 中已提到),流程为 line1,line2。

谁能帮我找出我在这里犯了什么错误?

【问题讨论】:

  • @robertklep...需要你的帮助。

标签: node.js mongodb express passport.js


【解决方案1】:

您已经创建了两个路由器实例playerfinalRun。主要有两个问题:

  1. 这行player.use('/usefile',player) 应该是app.use('/usefile',player)express.Router().use 用于为注册到路由器的所有路由添加中间件(在本例中为 player)。例如,如果您想为每个 player 路由使用 Passport 中的 Auth 中间件,则可以将其声明为 player.use(Auth)
  2. 您没有为finalRun 路由器声明任何路由处理。因此,在这种情况下,您使用player 注册的路由处理程序将处理host/usefile,而finalRun 将处理任何host/api

如果您希望使用player 注册的处理程序来处理/api/usefile,则使用单个路由器实例会简单得多。

使用player 路由器注册/api/usefile 路径,例如:

app.use('/api/usefile', player);

Docs for app.use

Docs for router.use

【讨论】:

  • 其实我已经设置app.use('/api', finalRun);来设置我在单个端点上创建的所有路由。
  • @AdityaJain finalRun 是一个没有任何路由处理程序的路由器(你添加一个路由器处理程序:finalRun.get(...); finalRun.post(...),就像你对player 路由器所做的那样) .
  • 虽然我已经在我的代码app.use('/api/usefile'); 中进行了编辑,但代码正在进入我的player.get('/', Auth, function(req, res){ console.log('inside get route'); 代码并显示控制台,但它没有得到另一个导出文件中的x.ogin 函数。 @metame
  • @AdityaJain 你也没有对那些x 函数做任何事情。如果你想给他们打电话,请使用x.login(req, res)(或者这个:player.get('/', Auth, x.login))。
  • @AdityaJain 如果您有具体问题,您应该在 SO 上提出一个新问题 :)