服务器在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/