因为我收到一些错误,例如:node:events:498 throw er; // 未处理的“错误”事件错误:getaddrinfo ENOTFOUND /about 在 GetAddrInfoReqWrap.onlookup [未完成](节点:dns:71:26) 在服务器实例上发出“错误”事件: 在 GetAddrInfoReqWrap.doListen [作为回调](节点:net:1513:12) 在 GetAddrInfoReqWrap.onlookup [未完成] (node:dns:71:17) { 错误号:-3008, 代码:'ENOTFOUND', 系统调用:'getaddrinfo', 主机名:'/about' }
代码是:
const http = require('http');
const fs = require('fs');
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/html'});
const myReadStream = fs.createReadStream(__dirname + '/index.html', 'utf-8');
myReadStream.pipe(res);
}).listen(8888);
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/html'});
const myaboutReadStream = fs.createReadStream(__dirname + '/about.html', 'utf-8');
myaboutReadStream.pipe(res);
}).listen(8888, '/about');
我得到了文件index.html和about.html,它们只是纯html...... 另外,挑战是仅使用nodejs内置函数(http.createServer)而不使用express或其他任何东西。
您可以需要适当的节点服务器,然后使用 https://expressjs.com/
但是想要用于 html 开发的服务器然后使用 live-server https://www.npmjs.com/package/live-server
对于 VS 代码 https://marketplace.visualstudio.com/items?itemName=ritwickdey.LiveServer
在 Node.js 中,当您使用
http.createServer
时,它会创建一个侦听指定端口的 HTTP 服务器。您试图创建两个监听同一端口的服务器,这不是正确的方法。
相反,您应该创建一个服务器并处理不同的请求,例如主页的
/
和关于页面的 /about
。
尝试以下代码:
const http = require('http');
const fs = require('fs');
const port = 8888;
http.createServer(function (req, res) {
if (req.url === '/about') {
serveFile('/about.html', res);
} else {
// Default to serving index.html for all other urls
serveFile('/index.html', res);
}
}).listen(port);
console.log(`Server is running on http://localhost:${port}`);
function serveFile(path, res) {
fs.readFile(__dirname + path, 'utf-8', function(err, content) {
if (err) {
res.writeHead(404, {'Content-Type': 'text/html'});
res.end('<h1>File not found</h1>');
} else {
res.writeHead(200, {'Content-Type': 'text/html'});
res.end(content);
}
});
}