首页 > 解决方案 > Express node.js forEach 路由

问题描述

我试图为我使用forEach循环的每个 ID 创建一条路线,但它会一直加载直到timeout达到,所有预期值都到位,一切都很好,但第二条路线没有运行,直到现在我都在拼命地对抗它。我确定有问题。

server.js

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

function isAuthorized(req, res, next) {
    if (req.user) {
        next();
    }
    else {
        res.redirect('/login')
    }
}

let myguild = [];

router.get(`*`, isAuthorized, (req, res) => {
    res.status(200);
    console.log("wow");
    console.log(req.user.guilds.length)
    req.user.guilds.forEach(guild => {
        myguild.push(guild);
    })
    console.log("Finished");
    myguild.forEach(guild => {
        console.log('Started')
        router.get(guild.id, (req, res) => { // here is the problem
            console.log("uh")
            res.send("HAMBURGER")
            console.log(req, res, guild)
        })
        console.log("Outed")
    })

});

module.exports = router;

output:

wow
23
Finished
Started
Outed
Started
Outed
Started
Outed
Star... 'there is more but this is enough'

它应该在其中运行并运行,server/${guild.id}但收到​​了(failed)请求

有任何想法吗?

标签: javascriptnode.jsexpressexpress-router

解决方案


您可能需要重新设计 API 以更好地适应您想要完成的任务。如果您已经知道哪些公会可用,那么您需要在服务器初始化之前创建这些公会。

即使它们来自数据库或者是动态的,您也可以遍历公会“选项”并创建端点,然后仅当用户合格时才提供对它们的访问权限。

const { guilds } = require('./config')
const guildHandler = (req, res) => {
    // Assuming you're doing more here
    res.send('Hamburger')
}

guilds.forEach(guild => router.get(`/guilds/${guildId}`, guildHandler)

或者,如果您没有在每个公会的中间件中做不同的事情,那么您可以只为公会提供一条路线。

router.get('/guilds/:guildId, guildHandler)

不太确定您要完成什么,但请查看 Express 文档。他们很容易解决大多数用例。

https://expressjs.com/en/api.html#req


推荐阅读