我可以在循环中使用res.send()node.js方法吗?

时间:2018-01-31 08:42:17

标签: javascript node.js express

我是node.js的初学者。我创建了节点服务器并使用express编写简单程序,使用res.send()方法发送响应。如果用户访问路径如“/ repeat / hello / 5”,则应打印hello 5次,并且该单词之间有空格。示例: 你好你好你好你好你好

var express = require("express");
var app = express();

var animalsData = {
    "dog" : "Bow Bow",
    "cat" : "Meow",
    "pig" : "Oink",
    "horse" : "Hiha",
    "lion" : "Roar"
}

app.get("/", function(req,res){
    res.send("Hi there! Welcome to my asssingment.");
});

app.get("/speak/:animal", function(req, res){
    var name = req.params.animal;

    if(animalsData[name]){
        res.send("The " +name+ " says '" +animalsData[name]+ "'.");
    } else
        res.send("I don't know what " +name+ " say.");
});

app.get("/repeat/:word/:times", function(req, res){
    var word = req.params.word;
    var times = parseInt(req.params.times);

    for(var i = 1; i<= times; i++){
        res.send(word);   
     }
});

app.listen(process.env.PORT, process.env.IP);

6 个答案:

答案 0 :(得分:1)

没有。

查看the documentation

  

发送HTTP响应

您不能对单个请求进行多次回复。

在循环时在变量中构建单个响应主体。循环结束后发送。

答案 1 :(得分:1)

作为第一个答案,你可以做类似的事情。

app.get("/repeat/:word/:times", function(req, res){
    var word = req.params.word;
    var times = parseInt(req.params.times);
    for(var i = 1; i<= times; i++){
         word = ' ' + word;  
     }
   res.send(word);
});

如果你想要一个流式api,请查看此文档server-send-events(sse)

答案 2 :(得分:1)

app.get("/repeat/:word/:times", function(req, res) {
    var word = req.params.word;
    var times = parseInt(req.params.times);
    var x = '';
    var y = word + ' ';
    for (var i = 1; i <= times; i++) {
        x += y;
    }
    res.send(x);
});

我尝试了这个,并且奏效了。

答案 3 :(得分:0)

通过将for循环包装在一个函数中,然后

res.send(functionName(times));

由于我还是初学者,所以我认为这不是最佳做法,但是它确实有效...

app.get("/repeat/:word/:times", function(req, res){
    var word = req.params.word;
    var times = parseInt(req.params.times);
    var str = ''

    function myFunction(n){
    for(var i = 1; i <= times; i++){
        str += word + ' ';
    }
        return str;
    }
        res.send(myFunction(times));
    });

答案 4 :(得分:0)


除了使用res.send之外,还可以在循环外使用res.write然后再使用res.end,因为您只能发送一次响应,因此它无法在循环中工作。

app.get("/repeat/:word/:num", function(req, res){
var number = req.params.num;
var word = req.params.word;
var numnum = parseInt(number);
for(var i = 0; i < numnum ; i++ ){
res.write(" " + word + " ");
}
res.end();
});

答案 5 :(得分:-2)

在同一请求上再次发送响应将使您无法设置标头错误。

一个请求只能有一个响应。