11

私はNodeとExpressを初めて使用します。始めたばかりで、Expressで何かを作成しようとしていたのですが、この問題に直面しました。

最初res.send()はうまく機能しますが、2番目は起動しません。

これが私のコードです:

var express = require('express'),
    app     = express(),
    fs      = require('fs'),
    visits;


app.listen(8080);

app.get('/', function(req,res) {

    res.send('Hello');

    fs.readFile('counter.txt','utf-8', function(e,d) {

        if (e) { 
            console.log(e);
        }
        else {
            console.log(parseInt(d) + 1);
            fs.writeFile('counter.txt',parseInt(d) + 1);
            res.send('<p id="c">' + ( parseInt(d) + 1 ) + '</p>');
        }

    })
...

「こんにちは」が送信されますが、送信されres.send('<p> .. </p>');ません。コメントres.send('Hello');すると、来場者が表示されます。

前もって感謝します。

4

2 に答える 2

12

res.send()一度だけ呼び出されることを意味します。

代わりにこれを試してください:

app.get('/', function(req,res) {
  var response = 'Hello';
  fs.readFile('counter.txt','utf-8', function(e,d) {
      if (e) {
        console.log(e);
        res.send(500, 'Something went wrong');
      }
      else {
        console.log(parseInt(d) + 1);
        fs.writeFile('counter.txt',parseInt(d) + 1);
        response += '<p id="c">' + ( parseInt(d) + 1 ) + '</p>';
        res.send(response);
      }
  })
});

(または単にres.send("Hello<p id=...")、しかしあなたはポイントを得る:)

于 2013-03-06T14:35:02.017 に答える
3

これは、res.send()が応答の送信を終了するためです。

res.send('Hello');検出されると、すぐに応答を送信します。そのため、nextres.sendは実行されず、訪問者を見ることができません。最初のコメントres.sendを付けると、2番目のコメントを表示できます。

于 2013-03-06T14:35:23.837 に答える