【Node.js】内置模块的初始学习,npm、http、fs、url、querystring

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
// 属性根据内容决定

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值