Nodejs 有时候需要一个小的开发用的静态文本 web server, 就写了一个
当然可以。以下是一个简单的 Node.js 静态文件 Web 服务器的实现,并附带一些简短的解释。
示例代码
首先,我们需要安装 http
模块来创建 HTTP 服务器,以及 path
模块来处理路径相关的操作。以下是完整的代码:
const http = require('http');
const path = require('path');
const fs = require('fs');
const hostname = '127.0.0.1';
const port = 3000;
const server = http.createServer((req, res) => {
const filePath = path.join(__dirname, req.url === '/' ? 'index.html' : req.url);
fs.access(filePath, fs.constants.F_OK, (err) => {
if (err) {
res.statusCode = 404;
res.end('File not found');
} else {
fs.readFile(filePath, (err, data) => {
if (err) {
res.statusCode = 500;
res.end('Internal Server Error');
} else {
res.statusCode = 200;
res.setHeader('Content-Type', 'text/html');
res.end(data);
}
});
}
});
});
server.listen(port, hostname, () => {
console.log(`Server running at http://${hostname}:${port}/`);
});
代码解释
-
引入模块:
http
:用于创建 HTTP 服务器。path
:用于处理路径相关的操作。fs
:用于读取文件系统中的文件。
-
定义服务器配置:
hostname
:服务器的 IP 地址(本地为127.0.0.1
)。port
:服务器监听的端口(这里使用3000
)。
-
创建 HTTP 服务器:
- 使用
http.createServer()
方法创建一个 HTTP 服务器,并传入一个回调函数来处理请求。 - 在回调函数中,我们根据请求的 URL 来确定要访问的文件路径。
- 使用
fs.access()
方法检查文件是否存在。如果不存在,则返回 404 错误。 - 如果文件存在,使用
fs.readFile()
方法读取文件内容,并将内容发送回客户端。
- 使用
-
启动服务器:
- 使用
server.listen()
方法启动服务器,并输出一条消息表示服务器已启动。
- 使用
使用方法
你可以将上述代码保存到一个文件(例如 server.js
),然后运行 node server.js
启动服务器。默认情况下,服务器会监听 http://127.0.0.1:3000/
。你可以在浏览器中访问该地址,查看 index.html
文件的内容。
如果你有其他静态文件,也可以通过修改 URL 访问它们。例如,访问 http://127.0.0.1:3000/sample.html
将会读取 sample.html
文件并显示其内容。
希望这个示例对你有所帮助!
回答
在开发过程中,我们有时需要一个简单的静态文本 Web 服务器来快速查看一些 HTML 页面。这种情况下,我们可以使用 Node.js 来创建一个小型的静态文件服务器。
以下是一个简单的示例代码,用于创建一个可以提供静态文件(如 HTML、CSS 和 JavaScript 文件)的服务:
const http = require('http');
const fs = require('fs');
const path = require('path');
const hostname = '127.0.0.1';
const port = 3000;
const server = http.createServer((req, res) => {
const filePath = path.join(__dirname, req.url === '/' ? 'index.html' : req.url);
const extname = String(path.extname(filePath)).toLowerCase();
const mimeTypes = {
'.html': 'text/html',
'.js': 'text/javascript',
'.css': 'text/css',
'.json': 'application/json',
'.png': 'image/png',
'.jpg': 'image/jpg',
'.gif': 'image/gif',
'.svg': 'image/svg+xml',
'.wav': 'audio/wav',
'.mp4': 'video/mp4',
'.woff': 'application/font-woff',
'.ttf': 'font/ttf',
'.eot': 'application/vnd.ms-fontobject',
'.otf': 'font/otf',
'.wasm': 'application/wasm'
};
let contentType = mimeTypes[extname] || 'application/octet-stream';
fs.readFile(filePath, (err, content) => {
if (err) {
if (err.code == 'ENOENT') {
fs.readFile(path.join(__dirname, '404.html'), (err, content) => {
res.writeHead(404, { 'Content-Type': 'text/html' });
res.end(content, 'utf-8');
});
} else {
res.writeHead(500);
res.end(`Server Error: ${err.code}`);
}
} else {
res.writeHead(200, { 'Content-Type': contentType });
res.end(content, 'utf-8');
}
});
});
server.listen(port, hostname, () => {
console.log(`Server running at http://${hostname}:${port}/`);
});
这段代码中,我们首先引入了 http
、fs
和 path
模块。http
模块用于创建 HTTP 服务器,fs
模块用于读取文件系统中的文件,而 path
模块用于处理路径。然后我们定义了一个 HTTP 服务器,该服务器会根据请求的 URL 路径读取对应的文件,并返回相应的 MIME 类型。如果请求的文件不存在,则返回 404 错误页面。
你可以将此代码保存为 server.js
并运行它 (node server.js
),然后在浏览器中访问 http://localhost:3000/
即可看到你的静态文件。
此外,如果你希望使用 Mustache 模板引擎生成 HTML 文件,可以在服务器中添加模板解析逻辑。例如,在读取文件时检查文件扩展名是否为 .mustache
,如果是,则使用 Mustache 渲染模板并返回渲染后的结果。这样你就可以使用 Mustache 模板动态生成 HTML 文件。