首页 > 解决方案 > 简单的 Node.js 服务器可以发送消息 - 为什么会抛出 html 错误?

问题描述

Node.js: v10.16.0

操作系统: Windows 10

问题:我的简单测试服务器可以发送消息,但不能发送 html 信息。为什么会这样?

背景:以下简单服务器在浏览器中显示消息“hello world”。但是,当我检查 devtools 中的 Network 选项卡时,我看到有关 favicon.ico 的错误(failed)::ERR_CONNECTION_REFUSED

'use strict';
const http = require('http');
const port = 3000;
const server = http.createServer((req,res) => {
    res.end('hello world');
    process.exit();
});
server.listen(port);

但是,当我尝试发送 html 信息时,它会立即引发错误。This site can’t be reached localhost refused to connect. ERR_CONNECTION_REFUSED.

'use strict';
const http = require('http');
const port = 3000;
const server = http.createServer((req,res) => {
    res.setHeader('Content-Type', 'text/html');
    res.write('<html>');
    res.write('<header><title>hello world</title></header>');
    res.write('<body><h1>hello world</h1></body>');
    res.write('</html>');
    res.end();
    process.exit();
});
server.listen(port);

服务器非常简单,我正在学习非常基本的教程。我不确定为什么 favicon.ico 在第一个版本中抛出连接被拒绝错误以及为什么第二个版本立即失败。

标签: node.js

解决方案


浏览器通常会为 HTML 页面发送多个请求,例如 favion.ico、实际页面等。

您的代码process.exit()在收到第一个请求后。

您可以像下面那样删除该行,它应该可以工作。

'use strict';
const http = require('http');
const port = 3000;
const server = http.createServer((req,res) => {
    res.setHeader('Content-Type', 'text/html');
    res.write('<html>');
    res.write('<header><title>hello world</title></header>');
    res.write('<body><h1>hello world</h1></body>');
    res.write('</html>');
    res.end();
});
server.listen(port);

推荐阅读