如何用Node.js编写一个支持长尾关键词的静态资源服务器?
- 内容介绍
- 相关推荐
本文共计1151个文字,预计阅读时间需要5分钟。
简介:本项目介绍了一个简单的静态资源服务器实例,旨在为Node.js初学者提供帮助。
本项目涵盖了http、fs、url、path、zlib、process、child_process等模块,涵盖了大量常用API。包括但不限于基于Node.js的静态资源服务器。
简介
本文介绍了一个简单的静态资源服务器的实例项目,希望能给Node.js初学者带来帮助。项目涉及到域名/test/index.html”的一个地址,服务器从根目录下的对应文件夹找到index.html,读出文件内容并返回给浏览器,浏览器渲染给用户。
const ${hostname}:${port}`); });
以上这段code就是我们的核心代码了,已经实现了核心功能,本地运行即可看到返回了文件目录,点击文件名便可浏览对应的网页、图片、文本啦。
step2.2 优化
功能实现了,但是我们可以在某些方面做做优化,提升实用性,顺便多学习几个api(装逼技巧)。
1. stream
我们目前读取文件返回给浏览器的操作是通过readFile一次性读出来,一次性返回,这样当然可以实现功能,但我们有更好的方式——用stream(流)进行IO操作。stream并不是node.js独有的概念,而是操作系统最基本的一种操作形式,所以理论上讲,任何一门server端语言都实现了stream的API。
为什么讲用stream是一种更好的方式?因为一次性读取、操作大文件,内存和网络是吃不消的,尤其在用户访问量比较大的情况下更为明显;而借助stream可以让数据流动起来,一点一点操作,从而提升性能。代码修改如下:
if (stats.isFile()) { //是文件,返回文件内容 //在createServer时传入的回调函数被添加到了"request"事件上,回调函数的两个形参req和res //分别为${config.hostname}:${config.port}`); });
这里就简单的举个栗子啦,大家可以自由发挥!
5. 自动打开浏览器
虽然没太大卵用,但还是要加。我就是要让你们知道,我加完之后什么样,你们就是什么样 :-( duang~
const exec = require("child_process").exec; server.listen(config.port, config.hostname, () => { console.log(`server is running on ${config.hostname}:${config.port}`); exec(`open ${config.hostname}:${config.port}`); });
6. process.cwd()
用process.cwd()代替__dirname。
我们最终要做成一个全局并且可以在任意目录下调用的命令,所以拼接path的代码修改如下:
//__dirname是当前文件的目录地址,process.cwd()返回的是脚本执行的路径 _path = path.join(process.cwd(), _path);
step3 发布
基本上我们的代码都写完了,可以考虑发布了!(不发布到npm上何以显示逼格?)
step3.1 package.json
得到一个配置类似下面所示的json文件:
{ "name": "here11", "version": "0.0.13", "private": false, "description": "a node static assets server", "bin": { "here": "./bin/index.js" }, "repository": { "type": "git", "url": "github.com/gww666/here.git" }, "scripts": { "test": "node bin/index.js" }, "keywords": [ "node" ], "author": "gw666", "license": "ISC" }
其中bin和private较为重要,其余的按照自己的项目情况填写。
bin这个配置代表的是npm i -g xxx之后,我们运行here命令所执行的文件,“here”这个名字可以随意起。
step3.2 声明脚本执行类型
在index.js文件的开头加上:#!/usr/bin/env node
否则linux上运行会报错。
step3.3 注册npm账号
勉强贴一手命令,还不清楚自行百度:
没有账号的先添加一个,执行:
npm adduser
然后依次填入
Username: your name
Password: your password
Email: yourmail
npm会给你发一封验证邮件,记得点一下,不然会发布失败。
执行登录命令:
npm login
执行发布命令:
npm publish
发布的时候记得把项目名字、版本号、作者、仓库啥的改一下,别填成我的。
还有readme文件写一下,好歹告诉别人咋用,基本上和文首所说的用法是一样的。
好了,齐活。
step3.4
还等啥啊,赶快把npm i -g xxx 这行命令发给你的小伙伴啊。什么?你没有小伙伴?告辞!
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持自由互联。
本文共计1151个文字,预计阅读时间需要5分钟。
简介:本项目介绍了一个简单的静态资源服务器实例,旨在为Node.js初学者提供帮助。
本项目涵盖了http、fs、url、path、zlib、process、child_process等模块,涵盖了大量常用API。包括但不限于基于Node.js的静态资源服务器。
简介
本文介绍了一个简单的静态资源服务器的实例项目,希望能给Node.js初学者带来帮助。项目涉及到域名/test/index.html”的一个地址,服务器从根目录下的对应文件夹找到index.html,读出文件内容并返回给浏览器,浏览器渲染给用户。
const ${hostname}:${port}`); });
以上这段code就是我们的核心代码了,已经实现了核心功能,本地运行即可看到返回了文件目录,点击文件名便可浏览对应的网页、图片、文本啦。
step2.2 优化
功能实现了,但是我们可以在某些方面做做优化,提升实用性,顺便多学习几个api(装逼技巧)。
1. stream
我们目前读取文件返回给浏览器的操作是通过readFile一次性读出来,一次性返回,这样当然可以实现功能,但我们有更好的方式——用stream(流)进行IO操作。stream并不是node.js独有的概念,而是操作系统最基本的一种操作形式,所以理论上讲,任何一门server端语言都实现了stream的API。
为什么讲用stream是一种更好的方式?因为一次性读取、操作大文件,内存和网络是吃不消的,尤其在用户访问量比较大的情况下更为明显;而借助stream可以让数据流动起来,一点一点操作,从而提升性能。代码修改如下:
if (stats.isFile()) { //是文件,返回文件内容 //在createServer时传入的回调函数被添加到了"request"事件上,回调函数的两个形参req和res //分别为${config.hostname}:${config.port}`); });
这里就简单的举个栗子啦,大家可以自由发挥!
5. 自动打开浏览器
虽然没太大卵用,但还是要加。我就是要让你们知道,我加完之后什么样,你们就是什么样 :-( duang~
const exec = require("child_process").exec; server.listen(config.port, config.hostname, () => { console.log(`server is running on ${config.hostname}:${config.port}`); exec(`open ${config.hostname}:${config.port}`); });
6. process.cwd()
用process.cwd()代替__dirname。
我们最终要做成一个全局并且可以在任意目录下调用的命令,所以拼接path的代码修改如下:
//__dirname是当前文件的目录地址,process.cwd()返回的是脚本执行的路径 _path = path.join(process.cwd(), _path);
step3 发布
基本上我们的代码都写完了,可以考虑发布了!(不发布到npm上何以显示逼格?)
step3.1 package.json
得到一个配置类似下面所示的json文件:
{ "name": "here11", "version": "0.0.13", "private": false, "description": "a node static assets server", "bin": { "here": "./bin/index.js" }, "repository": { "type": "git", "url": "github.com/gww666/here.git" }, "scripts": { "test": "node bin/index.js" }, "keywords": [ "node" ], "author": "gw666", "license": "ISC" }
其中bin和private较为重要,其余的按照自己的项目情况填写。
bin这个配置代表的是npm i -g xxx之后,我们运行here命令所执行的文件,“here”这个名字可以随意起。
step3.2 声明脚本执行类型
在index.js文件的开头加上:#!/usr/bin/env node
否则linux上运行会报错。
step3.3 注册npm账号
勉强贴一手命令,还不清楚自行百度:
没有账号的先添加一个,执行:
npm adduser
然后依次填入
Username: your name
Password: your password
Email: yourmail
npm会给你发一封验证邮件,记得点一下,不然会发布失败。
执行登录命令:
npm login
执行发布命令:
npm publish
发布的时候记得把项目名字、版本号、作者、仓库啥的改一下,别填成我的。
还有readme文件写一下,好歹告诉别人咋用,基本上和文首所说的用法是一样的。
好了,齐活。
step3.4
还等啥啊,赶快把npm i -g xxx 这行命令发给你的小伙伴啊。什么?你没有小伙伴?告辞!
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持自由互联。

