服务器在 8080 运行,但浏览器显示网页不可用
Server is running on 8080, but browser says webpage is unavailable
我遵循了本教程 (http://www.hongkiat.com/blog/node-js-server-side-javascript/),当 运行 倒数第二个脚本(用于创建静态服务器)时,命令提示符显示 "Server running on port 8080",但是在尝试访问时它在 localhost: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");
您的服务器显示异常和行号 => 去那个地方!
正如@maniacnero 所观察到的,API 中不再有 path.exists
这样的东西。有一个 fs.exists
但它已被弃用,以避免在节点的并发上下文中滥用。
可怕的情况是:
- 你异步检查文件是否存在。
- 与此同时,其他一些例程 deletes/renames 它,或者服务器上的其他东西。
- 您认为该文件存在,因此您尝试打开它并自信地不处理错误情况。
所以这里的经验教训是:
- 原子地做事
- 总是立即处理失败
只要你坚持这个纪律,就不需要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);
我还删除了那些 "binary" 东西,它们已经过时并且 API 中也没有记录!
尝试示例代码是一种很好的学习方式,但前提是您不要盲目地这样做。 ;) 尤其是在一种建立在快速变化的 API 之上的弱类型语言中,并且无数的教程都是由完全的初学者编写的。这是你的朋友:https://nodejs.org/api/
我遵循了本教程 (http://www.hongkiat.com/blog/node-js-server-side-javascript/),当 运行 倒数第二个脚本(用于创建静态服务器)时,命令提示符显示 "Server running on port 8080",但是在尝试访问时它在 localhost: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");
您的服务器显示异常和行号 => 去那个地方!
正如@maniacnero 所观察到的,API 中不再有 path.exists
这样的东西。有一个 fs.exists
但它已被弃用,以避免在节点的并发上下文中滥用。
可怕的情况是:
- 你异步检查文件是否存在。
- 与此同时,其他一些例程 deletes/renames 它,或者服务器上的其他东西。
- 您认为该文件存在,因此您尝试打开它并自信地不处理错误情况。
所以这里的经验教训是:
- 原子地做事
- 总是立即处理失败
只要你坚持这个纪律,就不需要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);
我还删除了那些 "binary" 东西,它们已经过时并且 API 中也没有记录!
尝试示例代码是一种很好的学习方式,但前提是您不要盲目地这样做。 ;) 尤其是在一种建立在快速变化的 API 之上的弱类型语言中,并且无数的教程都是由完全的初学者编写的。这是你的朋友:https://nodejs.org/api/