我想运行一个非常简单的HTTP服务器。对example.com的每个GET请求都应该得到index.html,但作为一个常规的HTML页面(即,与阅读普通网页时的体验相同)。
使用下面的代码,我可以读取index.html的内容。我如何服务index.html作为一个普通的网页?
var http = require('http');
var fs = require('fs');
var index = fs.readFileSync('index.html');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end(index);
}).listen(9615);
下面的一个建议很复杂,需要我为我想使用的每个资源(CSS、JavaScript、图像)文件写一个get行。
我如何能提供一个单一的HTML页面与一些图像,CSS和JavaScript?
Node.js webserver
没有第三方框架;允许查询字符串;添加尾随斜杠;处理404
创建一个public_html子文件夹,并将所有内容放在其中。
要点:https://gist.github.com/veganaize/fc3b9aa393ca688a284c54caf43a3fc3
var fs = require('fs');
require('http').createServer(function(request, response) {
var path = 'public_html'+ request.url.slice(0,
(request.url.indexOf('?')+1 || request.url.length+1) - 1);
fs.stat(path, function(bad_path, path_stat) {
if (bad_path) respond(404);
else if (path_stat.isDirectory() && path.slice(-1) !== '/') {
response.setHeader('Location', path.slice(11)+'/');
respond(301);
} else fs.readFile(path.slice(-1)==='/' ? path+'index.html' : path,
function(bad_file, file_content) {
if (bad_file) respond(404);
else respond(200, file_content);
});
});
function respond(status, content) {
response.statusCode = status;
response.end(content);
}
}).listen(80, function(){console.log('Server running on port 80...')});
创建一个简单的Node.js Web服务器,并从一个文件异步服务一个HTML页面
创建我的第一个node.js服务器时,我找到了一个简单而有效的方法来做到这一点。
我们可以在开始时加载一次HTML,而不是为每个请求加载HTML。然后返回我们在启动时加载的数据。
const host = "localhost";
const port = 5000;
const http = require("HTTP");
const fs = require("fs").promises;
let htmlFile;
const reqListenerFunc = function (req, resp) {
resp.setHeader("Content-Type", "text/html");
resp.writeHead(200);
resp.end(htmlFile);
};
const simpleServer = http.createServer(reqListenerFunc);
// // Using Arrow function directly
// const simpleServer = http.createServer( (req, resp) => {
// resp.setHeader("Content-Type", "text/html");
// resp.writeHead(200);
// resp.end(htmlFile);
// });
fs.readFile(__dirname + "/index.html")
.then(content => {
htmlFile = content;
simpleServer.listen(port, host, () => {
console.log(`Node.js web server is running on http://${host}:${port}`);
});
})
.catch(err => {
console.error(`Cannot read index.html file. <br> Error: ${err}`);
process.exit(1);
});
阅读更多信息:https://www.digitalocean.com/community/tutorials/how-to-create-a-web-server-in-node-js-with-the-http-module