Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,能够让 JavaScript 代码在服务器端运行。利用 Node.js 我们可以快速搭建一个简单的静态资源服务器。
创建一个服务器
在终端中使用以下命令创建一个新项目:
mkdir myServer
cd myServer
npm init
接下来我们需要安装依赖包 http
和 fs
。其中 http
将用于创建服务器,fs
用于读取文件。
npm install http fs --save
在项目根目录中创建一个名为 server.js
的文件,并加入以下代码:
const http = require('http');
const fs = require('fs');
const server = http.createServer((req, res) => {
let filePath = '.' + req.url;
if (filePath === './') {
filePath = './index.html';
}
fs.readFile(filePath, (error, content) => {
if (error) {
if (error.code === 'ENOENT') {
fs.readFile('./404.html', (error, content) => {
res.writeHead(404, { 'Content-Type': 'text/html' });
res.end(content, 'utf-8');
});
} else {
res.writeHead(500);
res.end('Sorry, check with the site admin for error: ' + error.code + ' ..\n');
res.end();
}
} else {
res.writeHead(200, { 'Content-Type': 'text/html' });
res.end(content, 'utf-8');
}
});
});
const port = 3000;
server.listen(port, () => {
console.log(`Server running at http://localhost:${port}`);
});
以上代码创建了一个服务器,在 3000 端口监听请求,并将静态文件返回给客户端。使用 http.createServer
方法创建服务器,回调函数 function(request, response)
处理请求和响应。在实现中我们先分析请求的 URL,如果是根路径根据默认信息 index.html
文件,否则返回请求路径对应的文件。对于不存在的文件,返回 404 Not Found
的状态码。对于其他错误,返回 500 Internal Server Error
的状态码。
运行 server.js
:
node server.js
访问 http://localhost:3000/ 即可查看是否正常启动。
提供 CSS, JavaScript 和图片等资源
除提供 HTML 页面外,还需要支持 CSS 文件和图片等其它资源文件的访问。可以设置一个 file type 的映射表,支持多种资源文件的访问。以下是完整代码的实现:
const http = require('http');
const fs = require('fs');
const path = require('path');
const mimeTypes = {
'html': 'text/html',
'css': 'text/css',
'js': 'text/javascript',
'jpeg': 'image/jpeg',
'jpg': 'image/jpg',
'png': 'image/png',
'svg': 'image/svg+xml',
};
const server = http.createServer( (req, res) => {
let filePath = '.' + req.url;
if (filePath === './') {
filePath = './index.html';
}
const extname = String(path.extname(filePath)).toLowerCase();
const contentType = mimeTypes[extname] || 'application/octet-stream';
fs.readFile(filePath, (error, content) => {
if (error) {
if (error.code === 'ENOENT') {
fs.readFile('./404.html', (error, content) => {
res.writeHead(404, { 'Content-Type': 'text/html' });
res.end(content, 'utf-8');
});
} else {
res.writeHead(500);
res.end('Sorry, check with the site admin for error: ' + error.code + ' ..\n');
res.end();
}
} else {
res.writeHead(200, { 'Content-Type': contentType });
res.end(content, 'utf-8');
}
});
});
const port = 3000;
server.listen(port, () => {
console.log(`Server running at http://localhost:${port}`);
});
在以上示例中,我们增加了一个 mimeTypes
对象,根据文件扩展名返回相应的 MIME 类型。获取文件扩展名可以使用 Node.js 内置的 path.extname
方法。同时,返回的状态码根据文件是否存在发生了变化:不存在,返回 404 状态码;其他错误,返回 500 状态码并在控制台中打印错误信息。
示例
以下是另外两个使用 Node.js
搭建的静态资源服务器示例:
Express
Express 是 Node.js 平台上运行的基于 Web 的应用程序开发框架,可以快速便捷地搭建 Node.js 应用程序。以下是 Express 框架搭建静态资源服务器的示例:
const express = require('express');
const app = express();
app.use(express.static('public')); // public 目录即为静态资源目录
const port = 3000;
app.listen(port, () => {
console.log(`Server running at http://localhost:${port}`);
});
Koa
Koa 是一个小巧且富有表现力的 Web 框架,使用 ES6 常规函数编写应用程序和中间件,并支持前缀中间件和异步处理,是 Express 的下一代基础架构。以下是 Koa 框架搭建静态资源服务器的示例:
const Koa = require('koa');
const serve = require('koa-static');
const app = new Koa();
const port = 3000;
app.use(serve('.')).listen(port, () => {
console.log(`Server running at http://localhost:${port}`);
});
在 Koa 框架中,我们使用 koa-static
模块来提供静态文件服务。调用模块并传递一个文件夹(根目录下的文件夹或其他文件夹)即可。在以上示例中,传递了当前文件夹 .
作为静态文件夹。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Node 搭建一个静态资源服务器的实现 - Python技术站