2014-11-21 113 views
1

這裏是我的代碼:爲什麼瀏覽器中沒有輸出?

var http = require('http') 

http.createServer(function (req, res) { 
    res.writeHead(200, { 
     "Content-Type": "json" 
    }); 
    fs.readdir('.', function (error, files) { 
     if (error) 
      res.end(util.format(error)) 

     files.forEach(function (file) { 
       fs.stat(file, function (erro, stats) { 
        console.log(JSON.stringify(stats)) 
        res.write(JSON.stringify(stats)) 
       }) 
      }) 
    }) 
}).listen(3000); 
console.log("server is running!") 

當我訪問http://127.0.0.1:3000/,沒有輸出,但是控制檯輸出爲:

{"dev":0,"mode":16822,"nlink":1,"uid":0,"gid":0,"rdev":0,"ino":0,"size":0,"atime":"2014-11-20T13:36:19.000Z","mtime":"2014-11-20T13:36:19.000Z","ctime":"2014-11-20T13:31:53.000Z"} 

{"dev":0,"mode":33206,"nlink":1,"uid":0,"gid":0,"rdev":0,"ino":0,"size":11,"atime":"2014-11-20T13:56:21.000Z","mtime":"2014-11-20T13:56:21.000Z","ctime":"2014-11-20T13:56:21.000Z"} 

{"dev":0,"mode":33206,"nlink":1,"uid":0,"gid":0,"rdev":0,"ino":0,"size":844,"atime":"2014-11-20T14:24:04.000Z","mtime":"2014-11-20T14:24:04.000Z","ctime":"2014-11-20T13:32:19.000Z"} 

{"dev":0,"mode":16822,"nlink":1,"uid":0,"gid":0,"rdev":0,"ino":0,"size":0,"atime":"2014-11-20T14:03:56.000Z","mtime":"2014-11-20T14:03:56.000Z","ctime":"2014-11-20T13:56:21.000Z"} 

回答

2

你需要調用res.end()當你與你的res.write完成調用。

http.createServer(function (req, res) { 
    res.writeHead(200, { 
     "Content-Type": "json" 
    }); 
    fs.readdir('.', function (error, files) { 
     if (error) 
      res.end(util.format(error)) 

     var filesLeft = files.length; 
     files.forEach(function (file) { 
       fs.stat(file, function (erro, stats) { 
        console.log(JSON.stringify(stats)) 
        res.write(JSON.stringify(stats)) 
        // Keep track of how many files' fs.stat calls are left 
        if (--filesLeft === 0) { 
         res.end(); 
        } 
       }) 
      }) 
    }) 
}).listen(3000); 
+0

是的,你是對的,我不熟悉nodejs中的'callback'和'Asynchronous'。 – BlackMamba 2014-11-21 02:42:20

相關問題