0

nodejitsu を使用してデプロイされた次の基本的な Web サーバーがあります。ファイルの内容を表示しようとしています。ファイル「test.txt」には、1 行のプレーン テキストが含まれています。ローカル マシンの「server.js」ファイルと同じフォルダに保存し、jitsu deploy を実行しました。fileRead コールバックは、err ブロックでさえ実行されないようです。他のすべては正常に動作します。コードは次のとおりです。

// requires node's http module
var http=require('http');
var url=require('url');
var fs=require('fs');

// creates a new httpServer instance
http.createServer(function (req, res) {
    // this is the callback, or request handler for the httpServer

    var parse=url.parse(req.url,true);
    var path=parse.pathname;
    // respond to the browser, write some headers so the 
    // browser knows what type of content we are sending
    res.writeHead(200, {'Content-Type': 'text/html'});

    fs.readFile('test.txt', 'utf8',function (err, data) {
        res.write('readFile complete');
        if(err){
            res.write('bad file');
            throw err;
        }
        if(data){
            res.write(data.toString('utf8'));
        }
    });

    // write some content to the browser that your user will see
    res.write('<h1>hello world!</h1>');
    res.write(path);

    // close the response
    res.end();
}).listen(8080); // the server will listen on port 8080

前もって感謝します!

4

2 に答える 2

3

readFile コールバックが実行される前に、res.end() 同期的に呼び出しています。

res.end()すべてが終了した後、つまりすべてのコールバックが終了した後に呼び出す必要があります。(エラーが発生したかどうか)

于 2013-05-26T14:55:00.990 に答える
0

答えてくれてありがとうSLaks。

コードを次のように更新する

// requires node's http module
var http=require('http');
var url=require('url');
var fs=require('fs');

// creates a new httpServer instance
http.createServer(function (req, res) {
    // this is the callback, or request handler for the httpServer

    var parse=url.parse(req.url,true);
    var path=parse.pathname;
    // respond to the browser, write some headers so the 
    // browser knows what type of content we are sending
    res.writeHead(200, {'Content-Type': 'text/html'});

    fs.readFile('test.txt', 'utf8',function (err, data) {
        res.write('readFile complete');
        if(err){
            res.write('bad file');
            throw err;
            res.end();
        }
        if(data){
            res.write(data.toString('utf8'));
            // write some content to the browser that your user will see
              res.write('<h1>hello world!</h1>');
              res.write(path);
            res.end();
        }
    });





}).listen(8080); // the server will listen on port 8080
于 2014-07-02T16:21:39.520 に答える