http----开启一个Web服务,给浏览器提供服务
url----给浏览器发送请求用,还可以传递参数(GET)
querystring----处理浏览器通过GET/POST发送过来的参数
path----查找文件的路径
fs----在服务器端读取文件用的
自定义模块:
一个.js文件就可以看成一个模块,如果我们想把模块中定义的变量,方法,对象给外面的js使用,就必须提供module将我们需要给外面用的东西,导出去。
导入模块用 require,在模块中导出 使用module.exports。
在nodejs中,模块是用于使用一些指定功能的js文件,通过以模块为单位来划分所有的功能,每一个模块中定义的全局变量和函数的作用范围也被限定在这个模块之内;包是用于管理模块以及其依赖关系的,可以对多个模块进行封装。本文操作环境:Windows10系统、nodejs 12.19.0版、Dell G3电脑。
nodejs模块与包是干什么的
区分一下包与模块:合理的使用包和模块,会使你的程序变得低冗余,高可读,功能全面。
一、NodeJS中包
包用于管理多个模块及其依赖关系,可以对多个模块进行封装,包的根目录必须包含 package.json 文件。
符合 CommonJS 规范的 package.json 文件一般包含以下字段:
name:包名。包名是唯一的,只能包含小写字母、数字和下划线。
version:包版本号。
description:包说明。
keywords:关键字数组,用于搜索。
homepage:项目主页。
bugs:提交 bug 的地址。
license:许可证。
maintainers:维护者数组。
contributors:贡献者数组。
repositories:项目仓库托管地址数组。
dependencies:包依赖。
1.1 生成package.json文件
package.json 文件可以自己手动编辑,还可以通过 npm init 命令进行生成。
在终端中输入 npm init 命令来生成一个包含 package.json 文件的包。直接输入 npm init --yes 跳过回答问题步骤,直接生成默认值的 package.json 文件。
1.2 包操作
通过命令 npm install xxx 来安装包。比如:
安装包:
npm install express
更新包:
npm update express
删除包:
npm uninstall express
在 npm 社区中去查找包,再通过命令 npm install 模块名字 就可以安装。每个模块的名字全球唯一。
二、NodeJS中模块
2.1 什么是模块
我们需要对比一下浏览器中的JS与Node.js中的JS:
在 JavaScript 中,我们通常把 JavaScript 代码分为几个 js 文件,然后在浏览器中将这些 js 文件合并运行。
Node.js 中,是通过以模块为单位来划分所有功能的。每一个模块为一个 js 文件,每一个模块中定义的全局变量和函数的作用范围也被限定在这个模块之内,只有使用 exports 对象才能传递到外部使用。
Node.js 官方提供了很多模块,这些模块分别实现了一种功能,如操作文件及文件系统的模块 fs,构建 http 服务的模块 http,处理文件路径的模块 path 等。
2.2 模块的创建
我们创建一个模块,并使用module.exports进行导出。
myModule.js文件
function foo() {
console.log("hello syl")}module.exports.foo = foo
index.js文件
var hello = require("./myModule.js")hello.foo()
nodejs模块与包有什么作用
注意:核心模块定义在 Node.js 源代码的 lib/ 目录下。require() 总是会优先加载核心模块。
例如:require(‘http’) 始终返回内置的 HTTP 模块,即使有同名文件。
2.3 区分 module.exports 和 exports
Node.js 为了简化你的操作,专门提供了一个变量:exports 等于 module.exports。
这两行代码效果是一样的:
module.exports.foo = fooexports.foo = foo
解释案例:
// module.jsconsole.log('module', module)console.log('module.exports', module.exports)console.log('exports', exports)console.log(module.exports === exports)console.log("=========================================")exports = {
a: 3,
}console.log(exports)console.log(module.exports)console.log(exports === module.exports)
nodejs模块与包有什么作用
require() 得到的是 module.exports 导出的值,导出多个成员可以用 module.exports 和 exports,导出单个成员只能用 module.exports。
以上就是“nodejs模块与包有什么作用”这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注亿速云行业资讯频道。
一、Express框架
前面的章节已经介绍过了,可以使用npm来安装node.js模块。具体操作请参照以前写的nodejs概论。
Express是一个nodejs的web开源框架,用于快速的搭建web项目。其主要集成了web的http服务器的创建、静态文本管理、服务器URL地址请求处理、get和post请求处理分发、session处理等功能。
使用方法,在cmd中打开你所想创建web项目的路径。然后输入
Express appname
即可创建一个名为appname的web项目。控制台打印结果
在cmd中进入appname文件夹输入
node appname.js
返回结果如下图,表示安装成功!
在项目开发中经常会出现这样的问题
此错误表示没有安装相关模块,解决办法是在cmd上打开项目文件夹,输入
npm install express
安装成功后会在本文件路径下生成一个node_modules,里面包含了Express框架代码。
其他模块也可用类似的方法进行安装,安装后的路径同样是在node_modules下。
二、jade模块
jade是一款高性能、简洁易懂的模板引擎。可通过jade来编写html文件。
jade类似一个用于快速编写html的语言,其编写后的文件后缀为.jade。
以下为文件的内容
在cmd中输入,压缩的过的可以通过加-P来不压缩,如果每次更改模版都要打命令行一次很麻烦是不是,我们可以通过加上jade -P -w jade.jade 加上一个-w来开启监视模式,每次更改模版,html文件都会自动编译咯
生成后的html文件如下:
在jada文件中是可以使用for循环和if判断语句的,可以让你体会类似JSP的<%%>和php的<php></php>在网页上输出数据的快感。
三、forever模块
nodejs作为http服务器,需要确保服务顺利进行,要注意一下两点:
1.后台服务运行,监控运行日志,以及http运行日志;
2.确保项目的正常安全运行,Node.js的启动命令node,很大程度无法满足运行需求;
Node.js的forever模块在第二点就可以起到很大的作用,同时其拥有监控文件更改、自动重启等功能。
forever模块的使用方法有两种:1.在命令行中使用
forever -l forever.log -o out.log -e err.log app.js
-l forever.log -o out.log -e err.log分别指定了forever的运行日志,脚本流水日志,脚本运行错误日志,启动后将在本文件夹下产生out.log、err.log文件。
2.在编码中require forever模块使用。
四、Socket.IO模块
Socket.IO模块主要功能是将WebSocket协议应用到所有浏览器。主要用于实时的长连接多求情项目中。
例如:在线联网游戏,实时聊天、实时股票查看、二维码扫描登录等。
安装方法仍然是在cmd在中输入npm install socket.io
如何使用Socket.IO来创建一个项目。
需要分别实现服务端和客户端的逻辑:
先创建一个服务端的node.js脚本index_server.js
var app = require('http').createServer(handler)//创建服务器app
, io = require('socket.io').listen(app)//引用socket.io模块监听app
, fs = require('fs')//引用文件处理模块
app.listen(80)//指定app监听的端口,第二个参数127.0.0.1可省略
function handler (req, res) {
fs.readFile(__dirname + '/index.html', function (err, data) { if (err) {
res.writeHead(500) return res.end('Error loading index.html')
}
res.writeHead(200)
res.end(data)
})
}
io.sockets.on('connection', function (socket) {
socket.emit('news', { hello: 'world' })
socket.on('my other event', function (data) {
console.log(data)
})
})
其中,socket.emit()为Socket发送消息的函数,第一个参数表示发送消息的key值,第二个参数为发送消息的内容,也就是发送的数据。
Socket。on()为Socket接收消息的函数,第一个参数为接收消息的可以值,第二个参数为回调函数,其中回调函数携带的参数为接收消息所发送的数据。
接下来web前端如何使用JavaScrit 来连接Socket服务器。
新建一个index_client.html
<script type="text/javascript" src="socket.js"></script>
<script type="text/javascript"> var socket = io.connect('http://localhost')//创建本地sock连接
socket.on('news',function (data) {//Socket接收news消息时执行回调函数 console.log(data)
socket.emit('my other event',{my:'data'})
})</script>
<script type="text/javascript" src="socket.js"></script>加载已经安装好的Socket.io的本地JavaScrit文件。
var socket = io.connect('http://localhost')因为端口为80,所有这里可以不端口号
socket.on('news',function (data){}//客户端接收news消息成功后,发送my other event消息到服务端,发送的消息内容为json对象{my:'data'}
接下来只需要运行服务端的index_server.js文件来启动socket服务
效果:在浏览器输入http://127.0.0.1按F12调出浏览器的控制台console即可看见打印出了一个object对象。
执行完毕后可能会报错:catnot find module socket.io,说明你的socket.IO没有安装,或已经安装并配置为全局,但你的安装路径并没有配置到在path中,所有无法引用。
你可以选择配置path,或者安装到项目内。这里建议安装到你的项目目录下,而不是简单粗暴的配置为全局。先卸载npm uninstall socket.io 进入指定目录后安装node index_server.js
socket.io详细请参阅 http://cnodejs.org/topic/50a1fcc7637ffa4155b5a264
五、request模块
request模块为开发者提供了一种简单访问HTTP请求的方法。request还支持HTTPS的访问方法。
安装:
npm install requset
request模块基本上覆盖了所有的HTTP请求方式如GET,POST,HEAD,DEL等。但其最基本的两个方法是request.get()和request.post().
get和post的区别
get:
1.使用get向服务器发出和接收的请求会附在url之后。类似:http://www.baidu.com?id=1221&name=5555这个url中传递了两个参数,一个为id,一个为name。
2.get请求不能超过1024个字节。
post没有限制,也不会附在url上。
接下来做一个简单的实例
get实例:
首先新建一个服务器app_get.js
var http= require("http")
http.createServer(function(req,res){
res.writeHead(200,{'content-Type':'text/plain'})
res.end('Hello world\n'+req.method)
}).listen(1337,"127.0.0.1")
再建一个发送求情的request_get.js文件
var request=require('request')
request.get("http://127.0.0.1:1337",function(error,response,result){
console.log(result)
})
在CMD中运行app_get.js,运行成功后,再打开一个cmd(之前的cmd不要关闭),执行request_get.js文件。
执行后的结果如下
hello world
GET
可以看出,通过request.get方法访问
http://127.0.0.1:1337 返回的结果就是res.end()的参数
post实例:
和上面一样,先新建服务器app_post.js
var http= require("http"),
querystring=require('querystring')
http.createServer(function(req,res){ var postData="" //开始异步接收客户端post的数据
req.addListener("data",function (postDataChunk) {
postData += postDataChunk
}) //异步post数据接收完毕后执行匿名回调函数
req.addListener("end",function(){ var postStr=JSON.stringify(querystring.parse(postData))
res.writeHead(200,{'content-Type':'text/plain'})
res.end(postStr+'\n'+req.method)
})
}).listen(1400,"127.0.0.1")
然后再新建一个request_post.js
var request=require("request")
request.post('http://127.0.0.1:1400',{form:{'name':'ermu','book':'node.js'}},function (error,response,result) {
console.log(result)
})
像上面一样在cmd中执行后显示的结果如下:
D:\nodejs\src\request>node request_post.js
{"name":"ermu","book":"node.js"}
POST
request post提交了一个json对象{"name":"ermu","book":"node.js"}而服务器接通过获取该POST数据,然后返回客户端,同时将http请求方式也响应到客户端。
request post参数可以有两种传递方式。
其中,第一种是将url和form表单的数据作为json参数在request post传递。举例如下:
request.post('url':'http://127.0.0.1:1400',form:{'name':'ermu','book':'node.js'}},function (error,response,result) {
console.log(result)
})
另一种是将url和form作为两个参数,上面的实例就是使用这种方法。
六、 Formidable模块
该模块的目的是为了解决文件上传。
在原生的node.js模块中,提供了获取post数据的方法,但是并没有直接获取上传文件。