服务器在8080上运行,但浏览器说网页不可用

我遵循本教程( http://www.hongkiat.com/blog/node-js-server-side-javascript/ ),并在运行下一个脚本(用于创build静态服务器)时,命令提示符显示“服务器正在运行在端口8080“,但当试图访问它在本地主机:8080我刚刚得到一个网页是不可用的错误。

我已经在防火墙中允许访问8080。

什么可能导致这个? 我应该试图从另一个地址访问页面?

当我尝试访问该页面时,我在cmd中收到以下错误消息:

C:\Users\id122302\Documents\test.js:11 path.exists(full_path,function(exists) ^ TypeError: undefined is not a function at Server.<anonymous> (C:\Users\id122302\Documents\test.js:11:7) at Server.emit (events.js:110:17) at HTTPParser.parserOnIncoming [as onIncoming] (_http_server.js:491:12) at HTTPParser.parserOnHeadersComplete (_http_common.js:111:23) at Socket.socketOnData (_http_server.js:343:22) at Socket.emit (events.js:107:17) at readableAddChunk (_stream_readable.js:163:16) at Socket.Readable.push (_stream_readable.js:126:10) at TCP.onread (net.js:538:20) 

这是我的代码:

 var sys = require("sys"); my_http = require("http"); path = require("path"); url = require("url"); filesys = require("fs"); //Create Server my_http.createServer(function(request,response) { var my_path = url.parse(request.url).pathname; var full_path = path.join(process.cwd(),my_path); path.exists(full_path,function(exists) { if (!exists) { response.writeHeader(404, {"Content-Type":"text/plain"}); response.write("404 Not Found\n"); response.end(); } else { filesys.readFile(full_path, "binary", function(err,file) { if (err) { response.writeHeader(500,{"Content-Type":"text/plain"}); response.write(err + "\n"); response.end(); } else { response.writeHeader(200); response.write(file,"binary"); response.end(); } }); } }); }).listen(8080); console.log("Server Running on 8080"); 

你的服务器显示一个exception和一个行号=>去那个地方!

正如@maniacnero所观察到的,API中不存在path.exists 。 有一个fs.exists但它已被废弃,以避免滥用在节点的并发上下文中。

可怕的情况是:

  • 如果文件存在,则asynchronous检查。
  • 一些其他的例程在此期间删除/重命名,或者在服务器上做其他事情。
  • 你认为文件存在,所以你试图打开它,自信地不处理错误的情况下。

所以这里学到的教训是:

  • 自动地做事情
  • 总是马上处理失败

只要你坚持这个纪律,就没有必要像fs.exists那样的fs.exists 。 以下是您的代码的修改版本:

 var sys = require("sys"); var http = require("http"); var path = require("path"); var url = require("url"); var fs = require("fs"); var port = 8080; http.createServer(function(request,response) { var my_path = url.parse(request.url).pathname; var full_path = path.join(process.cwd(),my_path); fs.readFile(full_path, function(err, file) { if (err) { response.writeHeader(404, {"Content-Type":"text/plain"}); response.write("404 Not Found\n"); response.end(); } else { response.writeHeader(200); response.write(file); response.end(); } }); }).listen(port); console.log("Server Running on " + port); 

我也删除了这些“二进制”thingys,这是过时的,没有logging在API中!

玩代码示例是一种很好的学习方式,但前提是你不要盲目做。 ;)特别是在一个快速变化的API的基础上构build的弱types语言,以及大量的初学者编写的教程。 这是你的朋友: https : //nodejs.org/api/