Nodejs中如何配置静态资源的引入路径(不用express)
Nodejs中如何配置静态资源的引入路径(不用express)
3 回复
Nodejs中如何配置静态资源的引入路径(不用express)
在Node.js中,如果你不使用Express框架,仍然可以通过原生模块http
来创建一个HTTP服务器,并且配置静态资源的引入路径。以下是一个简单的示例,展示如何设置静态资源目录并提供文件服务。
步骤1: 创建基本的HTTP服务器
首先,我们需要创建一个基本的HTTP服务器来处理请求。我们使用Node.js内置的http
模块来实现这一点。
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) => {
// 处理根路径
if (req.url === '/') {
serveFile('/index.html', res);
} else {
// 处理其他静态资源请求
const filePath = path.join(__dirname, req.url);
fs.readFile(filePath, (err, data) => {
if (err) {
res.writeHead(404, { 'Content-Type': 'text/plain' });
res.end('Not Found');
} else {
res.writeHead(200, { 'Content-Type': getContentType(req.url) });
res.end(data);
}
});
}
});
server.listen(port, hostname, () => {
console.log(`Server running at http://${hostname}:${port}/`);
});
function serveFile(filePath, res) {
const fullPath = path.join(__dirname, filePath);
fs.readFile(fullPath, (err, data) => {
if (err) {
res.writeHead(404, { 'Content-Type': 'text/plain' });
res.end('Not Found');
} else {
res.writeHead(200, { 'Content-Type': getContentType(filePath) });
res.end(data);
}
});
}
function getContentType(url) {
const extname = String(path.extname(url)).toLowerCase();
const mimeTypes = {
'.html': 'text/html',
'.css': 'text/css',
'.js': 'application/javascript',
'.json': 'application/json',
'.jpg': 'image/jpeg',
'.png': 'image/png'
};
return mimeTypes[extname] || 'application/octet-stream';
}
解释
- 基本HTTP服务器:我们使用
http.createServer()
创建了一个HTTP服务器。 - 根路径处理:当用户访问根路径(例如
/
)时,我们调用serveFile('/index.html', res)
来提供index.html
文件。 - 静态资源处理:对于其他路径,我们根据请求的URL构造文件路径,并使用
fs.readFile()
读取文件内容。 - 错误处理:如果文件不存在,返回404状态码和“Not Found”消息。
- 内容类型:
getContentType()
函数根据文件扩展名确定正确的MIME类型。
通过这种方式,你可以在不使用Express的情况下为Node.js应用配置静态资源的引入路径。
if(index of(’.’)>0) 的路由判断 //比较蠢又实用的方法
Node.js 中如何配置静态资源的引入路径(不用 Express)
在 Node.js 中引入静态资源时,通常会使用一些流行的库,比如 http-server
或者自己手动创建一个 HTTP 服务器。这里我们将展示如何手动创建一个简单的 HTTP 服务器,并配置静态资源的引入路径。
示例代码
const http = require('http');
const fs = require('fs');
const path = require('path');
// 创建一个 HTTP 服务器
const server = http.createServer((req, res) => {
// 获取请求路径
const filePath = path.join(__dirname, req.url === '/' ? 'index.html' : req.url);
// 读取文件并发送给客户端
fs.readFile(filePath, (err, data) => {
if (err) {
// 如果文件不存在,则返回404错误
res.writeHead(404);
res.end('Not Found');
} else {
// 设置响应头
res.writeHead(200, { 'Content-Type': 'text/html' });
res.end(data);
}
});
});
// 监听端口
server.listen(3000, () => {
console.log('Server is running on port 3000');
});
解释
-
导入必要的模块:
http
模块用于创建 HTTP 服务器。fs
模块用于读取文件。path
模块用于处理路径。
-
创建 HTTP 服务器:
- 使用
http.createServer
方法创建一个服务器实例。 - 提供一个回调函数来处理每个请求。
- 使用
-
解析请求路径:
- 使用
req.url
获取请求路径,并根据需要拼接完整的文件路径。 - 如果请求路径为空(即根路径),默认加载
index.html
文件。
- 使用
-
读取文件并发送响应:
- 使用
fs.readFile
读取文件内容。 - 如果文件存在,则设置响应头并将文件内容发送给客户端。
- 如果文件不存在,则返回 404 错误。
- 使用
-
监听端口:
- 使用
server.listen
方法监听指定端口(本例中为 3000)。
- 使用
通过这种方式,你可以手动创建一个 HTTP 服务器,并为静态资源提供服务。如果你有更多的需求,比如支持不同的 MIME 类型或更复杂的路径处理逻辑,可以在此基础上进行扩展。