文章目录
npm模块
Node Package Manager,npm是node的包管理工具,包就是别人写的node模块。包的云服务器在npmjs.com,下载的包都来自这里。
初体验
新建一个文件夹,终端输入
npm init
通过信息选择后(可以回车默认)这样就初始化了一个npm包的项目,会生成一个package.json文件,里面注册了这个包的信息,也意味者可以引入其他包进来。
{
"name": "npm",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"author": "",
"license": "ISC"
}
当你通过npm install xxx
把其他包安装进来的时候,会生成一个新字段dependencies
,里面会记录你安装过什么模块。
被安装的包源文件都被安装在node_modules文件里
详细文档可以看官方文档。
淘宝镜像
淘宝每十分钟会尽量更新国外npm包到国内站点,如果npm包下载过慢可以切到这个镜像。
npm i -g cnpm --registry=https://registry.npm.taobao.org
其实下下来的cnpm和npm是一个东西,cnpm的指令就是npm加上后面--registry=https://registry.npm.taobao.org
指向的镜像网址。
devdependencies和dependencies
package.json文件有两个字段,用来记录不同环境下使用的包内容和版本。
devdependencies
:用来记录开发环境下需要,上线不需要的依赖。
dependencies
:用来记录只有上线环境下需要的依赖。
一开始可能会搞不明白哪个依赖要放在哪个环境里,平时开发的时候,有意的看下这两个地方,会慢慢搞懂的。
一些常用指令
指令 | 作用 |
---|---|
npm -v | 查看npm版本 |
npm init | 以npm初始化文件,默认都选yes可以输入npm inint -y |
npm install xxx | 安装其他指定模块。安装多个可以空格区分,npm install a b c(不建议这样装依赖,可能没注册在dependencies 里面) |
npm install xxx --save-dev | 安装到devdependencies环境 |
npm install xxx --save | 安装到dependencies环境 |
npm install npm -g | 升级 |
npm uninstall xxx | 删除其他指定模块 |
node_modules文件夹删除过慢
当依赖很多的时候,手动鼠标右键删除node_modules会非常的慢,甚至会让人抓狂。
全局安装这个:
npm install rimraf -g
之后删除只需要:
rimraf node_modules
亲测速度确实快了。
一些大牛
认识一些npm包制作大师:
- TJ Holowaychunk,express作者;
- Mafintosh;
- Dominictarr,贡献了很多包,有个event-stream事件;
- …
http模块
node里除了有http模块,还有http2、https模块,具体的api比较多,推荐看文档。
这里就记录一些比较简单初学的使用方式。http模块能够实现简单的服务器,不需要单独去安装这些服务器软件。
url知识
这篇文章先简单介绍一点url的知识,之后详细内容会更新到【网络基础】这个专栏里。
url就简单的理解为一个网络文件的地址,主要组成部分有:
- 模式/协议(scheme);
- 域名/ip地址;
- 端口;
- 文件路径/文件名(可理解为路由);
- 查询字符串(类似路由参数);
回环地址:所有计算机都有一个指向自己的默认地址,例如127.0.0.1:3000;
本地地址:一般我们启动的本机网络服务都会默认是本地地址,例如localhost:3000,指向127.0.0.1:3000;
简单使用
首先要引入内置http模块
var http = require("http");
然后实例化模块对象
var xxx = http.createServer(function(req, res){
...
})
回调中的两个参数是两个有很多内容的对象,req就是request
请求对象,res就是response
响应对象。这里就简单讲几个api:
req:
req.url // 代表前端发送过来的url
req.method // 获取浏览器发送数据的方式,比如大写的POST、GET
req.on // 用来监听前台发送过来的数据(不包括地址)后,做出反应。
req.on('data',function (chunk) { // 当浏览器有数据发送过来的时候就会触发后面的函数
// 其中chunk参数:表示数据块,浏览器把数据切块来分块发送,比如把username=123&password=123分成75 73 65 72 6e 61 6d 65 3d 31 32 33 26 70 61 73 73 77 6f 72 64 3d 31 32 33来传输
...
})
req.on('end',function () { // 数据接收完成以后触发后面的函数
...
})
res:
res.write() // 向前端发送document.write()
res.end() // 结束发送,必须加
res.setHeader("content-type", "text/html;charset=utf-8") // utf-8解码发送,让res发送给前台的html的内容以utf-8解码,否则会出现乱码
最后要监听端口:
app.listen(端口号) // 在每个实例化html的文件中,都需要一个接口,让服务器来通过接口来访问到这个文件。
fs模块
主要是在本地文件中读取其他文件。
简单使用
引入:
var fs = require("fs");
读取html文件:
fs.readFile(".html文件地址", "utf-8", function (err, data) { // 表示读取一个html文件,并且内容用utf-8解码
// err 表示错误,一般里面为空,例如发送来的网址有错误,就会存在err里
// data 表示文件读取后的数据
if (!err) {
res.write(data)
res.end()
}
}
fs.readFile("地址", "binary", function (err, data) { // 发送纯文字或图片,要用二进制解码
err // 表示错误,一般里面为空,例如发送来的网址有错误,就会存在err里
data // 表示文件读取后的数据
if (!err) {
res.write(data, 'binary')
res.end()
}
}
url模块
用于把一个地址拆分成键值对形式的对象。
简单使用
引入:
var url = require("url");
把url字符串解析成对象:
var str = “网址”;
var obj = url.parse(str); // 成为对象后具有很多属性
// 其中
query // 截取发送请求的时候,发送到后台的数据,比如http://nodeing.com/search?q=html&name=xiaoqiang 中的q=html&name=xiaoqiang
pathname // 截取路由路径,比如http://nodeing.com/search?q=html&name=xiaoqiang中的/search?
querystring模块
用于把一个字符串拆分成键值对形式的对象,常与url模块配合使用。
简单使用
引用:
var querystring = require("querystring");
把字符串解析成对象:
var str = "q=html&name=xiaoming";
var str_obj = querystring.parse(str);
console.log(str_obj); //q: 'html', name: 'xiaoming'
console.log(str_obj.q); //html
// 属性根据内容决定