副问题[/!--empirenews.page--]
简介
本文先容了一个简朴的静态资源处事器的实例项目,但愿能给Node.js初学者带来辅佐。项目涉及到http、fs、url、path、zlib、process、child_process等模块,涵盖大量常用api;还包罗了基于http协议的缓存计策选取、gzip压缩优化等;最终我们会宣布到npm上,做成一个可以全局安装、行使的小器材。麻雀虽小,五脏俱全,一想是不是尚有点小感动?话不多说,放码过来。
文中源码地点在最后附录中。
可先行体验项目结果:
安装:npm i -g here11
恣意文件夹地点输入呼吁:here
step1 新建项目
由于我们要宣布到npm上,以是我们先凭证国际老例,npm init,走你!在呼吁行可以一起回车,有些设置会在最后的宣布步调中细说。
目次布局如下:
bin文件夹存放我们的执行代码,web作为一个测试文件夹,内里放了些网页。
step2 码码
step2.1 雏形
静态资源处事器,普通讲就是我们在赏识器地点栏输入形如“http://域名/test/index.html”的一个地点,处事器从根目次下的对应文件夹找到index.html,读出文件内容并返回给赏识器,赏识器渲染给用户。
- const http = require("http");
- const url = require("url");
- const fs = require("fs");
- const path = require("path");
- const item = (name, parentPath) => {
- let path = parentPath = `${parentPath}/${name}`.slice(1);
- return `<div><a href="${path}">${name}</a></div>`;
- }
- const list = (arr, parentPath) => {
- return arr.map(name => item(name, parentPath)).join("");
- }
- const server = http.createServer((req, res) => {
- let _path = url.parse(req.url).pathname;//去掉search
- let parentPath = _path;
- _path = path.join(__dirname, _path);
- try {
- //拿到路径所对应的文件描写工具
- let stats = fs.statSync(_path);
- if (stats.isFile()) {
- //是文件,返回文件内容
- let file = fs.readFileSync(_path);
- res.end(file);
- } else if (stats.isDirectory()) {
- //是目次,返回目次列表,让用户可以继承点击
- let dirArray = fs.readdirSync(_path);
- res.end(list(dirArray, parentPath));
- } else {
- res.end();
- }
- } catch (err) {
- res.writeHead(404, "Not Found");
- res.end();
- }
- });
- const port = 2234;
- const hostname = "127.0.0.1";
- server.listen(port, hostname, () => {
- console.log(`server is running on http://${hostname}:${port}`);
- });
以上这段code就是我们的焦点代码了,已经实现了焦点成果,当地运行即可看到返回了文件目次,点击文件名便可赏识对应的网页、图片、文本啦。
step2.2 优化
成果实现了,可是我们可以在某些方面做做优化,晋升适用性,趁便多进修几个api(装逼能力)。
1. stream
(编辑:河北网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|