簡體   English   中英

我可以在循環內使用 res.send() node.js 方法嗎?

[英]Can I use res.send() node.js method inside the loop?

我是 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);

作為第一個答案,你可以做類似的事情。

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)

沒有。

查看文檔

發送 HTTP 響應

您不能對單個請求有多個響應。


在循環時在變量中構建單個響應主體。 循環完成后發送它。

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

我試過了,它奏效了。

它的工作原理是將 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));
    });

而不是使用 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();
});

對同一請求再次發送響應會給您無法設置標頭錯誤。

一個請求只能有一個響應。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM