Nodejs for-loop创建动态内容

时间:2018-01-04 07:24:13

标签: javascript node.js

使用Express我想知道如何使用Node动态添加路由。在用户向我的element输入一些信息之后,我需要生成我需要的路线,并且我一直试图通过For Loops完成此操作。

我发现路线本身有效。但是,要分配给它们的数据(在本例中为elementdata[i])不遵循for循环。在调用elementdata[i]时,i === elementarray.length

我的代码看起来像这样。

        for (i = 0; i < elementarray.length; i++){
                app.get("/"+element[i], function(req, res){
                    res.writeHead(200, {'Content-Type': 'text/plain'});
                    res.write(elementdata[i]);
                    res.end();
                });
        }

4 个答案:

答案 0 :(得分:2)

您相应地获取数据

app.get('/:element', function(req, res) {
console.log(req.params.element);
});

这是此EXPRESSJS

的文档

答案 1 :(得分:1)

首先,你不能以这种方式添加动态路径,因为在这种情况下app.get()是异步函数,所以这会给你带来不好的结果 - (在循环中读取异步函数) 通过这种方式,您应该使用参数,例如:

app.get('/:id', (req, res)=>{
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.write(req.params.id);
    res.end();
})

这里有很好的解释:http://expressjs.com/en/guide/routing.html

答案 2 :(得分:1)

这是预料之中的,因为当您的路线被称为&#39; for loop&#39;完成后,我= = elementarray.lenght并坐在全局执行上下文中。定义&#39; i&#39;使用&#39;让&#39;这将解决您的问题。然后它将创建多个&#39; i&#39;值并附加到app.get()执行上下文。

 for (let i = 0; i < elementarray.length; i++){
                app.get("/"+element[i], function(req, res){
                    res.writeHead(200, {'Content-Type': 'text/plain'});
                    res.write(elementdata[i]);
                    res.end();
                });
        }

答案 3 :(得分:1)

i变量会保持更改,因此您只会得到它的最后一个值(elementarray.length

for (i = 0; i < elementarray.length; i++){
    addRoute(i)                
}

function (i){
    app.get("/"+element[i], function(req, res){
        res.writeHead(200, {'Content-Type': 'text/plain'});
        res.write(elementdata[i]);
        res.end();
    });
}

如果将其移至分离的函数,则每次将其绑定到i值的副本

或者你可以这样做:

for (let i = 0; i < elementarray.length; i++){
        (function(i){
            app.get("/"+element[i], function(req, res){
            res.writeHead(200, {'Content-Type': 'text/plain'});
            res.write(elementdata[i]);
            res.end();
        })})(i);
}

每次都会创建一个i`变量的克隆。