如何使用nodejs创建http服务器来提供一些html文件?

问题描述 投票:0回答:2

因为我收到一些错误,例如: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或其他任何东西。

node.js
2个回答
0
投票

您可以需要适当的节点服务器,然后使用 https://expressjs.com/

但是想要用于 html 开发的服务器然后使用 live-server https://www.npmjs.com/package/live-server

对于 VS 代码 https://marketplace.visualstudio.com/items?itemName=ritwickdey.LiveServer


0
投票

在 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);
        }
    });
}
© www.soinside.com 2019 - 2024. All rights reserved.