此答案适用于静态页面和文件,因为静态 url 并不是 node.js 的真正问题,它在 express js guide 中有所介绍。
如果您要构建一个 web 应用程序,只使用 node.js 而不使用任何框架是一个非常糟糕的主意。然而,有很多优秀的 node.js 网络框架让生活变得更轻松。如果您安装了NPM,它们也很容易包含在内。
我只有express.js 的经验,但如果您以前有任何 MVC 类型的网络框架的经验,那么创建网络应用程序真的很容易。
根据我的经验,确实没有办法为 node.js 中内置的静态页面提供服务。但是,构建一个可以为静态页面提供服务的控制器非常简单。
这是一个使用 express.js 的示例。
server.js
...
app.get('/content/*', controllers.content.getfile);
...
这将创建一个路由,该路由捕获到 content 目录的每个 url,并将其定向到内容控制器中的操作 getfile,即 www.yourdomain.com/content/style.css
controllers.js
...
exports.content = {
getfile : function(req,res){
var uri = url.parse(req.url).pathname;
var filename = path.join(process.cwd(), uri);
path.exists(filename, function(exists){
if(!exists){
res.writeHead(404, {"Content-Type" : "text/plain"});
res.write("Content not found");
res.end();
return;
}
fs.readFile(filename, "binary", function(err, file){
res.writeHead(200, {'Content-Type' : mime.lookup(filename) });
res.write(file, "binary");
res.end();
});
});
}
}
...
内容控制器中的此操作 getfile 在内容目录中查找 URL 中指定的文件并将其提供给客户端。它requires 可以通过 NPM 获得的 mime 库。
这允许使用 /content/ 文件夹中的静态文件。如果您愿意,可以让路由捕获每个未捕获的 URL,并从路由向上查找静态文件。但是,您必须设置某种过滤器,这样您就不能只访问 server.js 文件。