Nodejs简介
Nodejs不是一门语言也不是框架,它只是基于Google V8引擎的JavaScript运行时环境
,同时结合了Libuv扩展了JavaScript功能,使之支持io,fs等只有语言才有的特性,使得JavaScript能够同时具有DOM操作(浏览器)和I/O(输入/输出)、文件读写、操作数据库(服务器端)等能力,是目前最简单的全栈式语言。它可以使原本在浏览器中运行的JavaScript有能力跑后端,从而操作我们的数据库,进行文件读写等;市面上高密的I/O模型,比如web开发,微服务,前端构建等都有Node.js 的身影,因为它可以实现自动化构建。它是一个开源与跨平台的 JavaScript 运行时环境。 它是一个可用于几乎任何项目的流行工具!
node.js的包管理工具,npm已经成为世界开源包管理中的最大生态,功能强大,此外也可以用yarn或者淘宝镜像cnpm。
Nodejs特点
1.事件驱动
2.非阻塞IO模型(异步)
3.轻量和高效
Nodejs在一线企业中的运用
作为中间层
客户端直接请求到中间层的Node服务,Node服务分析请求,看需要哪个页面,再去请求对应得数据,拿到数据之后和模板结合成用户想看到的页面,再拿给客户端。
Nodejs在前端中的作用
做项目构建工具
比如说webpack,vue-cli都是输入项目构建的工具,它们就是用Nodejs来写的。
小型的后端也是有Nodejs来写
Node中模块导入/导出:exports和module.exports
在编写每个模块时,都有require,exports,module
三个预先定义好的变量可供使用
nodejs中模块的分类
核心模块(已经封装好的内置模块)
自己定义好的模块
第三方的模块(npm下载下来的)
require()函数的两个作用
执行导入的模块中的代码
返回导入模块中的接口对象
index1.js
let a=1;
let b=2;
let c = 999;
exports.a = a;
module.exports.c = c;
//系统默认设置了:exports = module.exports.c
index1.js
let a = require('./index1')
//在没有任何内容导出的情况下获取某个文件的内容 获得到一个空对象
//require获取路径时 可以不加后缀名 默认的后缀名就是.js
结果
PS D:\nodefile> node .\index.js
{ a: 1 }
PS D:\nodefile> node .\index.js
{ a: 1, c: 999 }
这里可以安装第三方包jquery
npm install jquery
//仅在模块第一次被使用时执行一次
let b= require('./index1')
let $ = require('jquery')//新添加
console.log(a);
console.log(b);
console.log(a==b);
console.log($);//新添加
结果
PS D:\nodefile> node .\index.js
{ username: '学生' }
{ user: '小明' }
{ user: '小明' }
true
[Function (anonymous)]
其实,当我们输入npm install后这些模块就会被自动安装到开发目录下的node_modules下
这里,安装好之后会生成node_modules\jquery文件夹
这里可以去了解一下package.json文件
总结:
- Node中每个模块都有一个 module对象, module对象中的有一个exports属性为一个接口对象,我们需要把模块之间公共的方法或属性挂载在这个接口对象中,方便其他的模块使用这些公共的方法或属性。
- Node中每个模块的最后,都会return:module.exports。
- Node中每个模块都会把module. exports指向的对象赋值给一个变量 exports ,也就是说: exports=module. exports。
- module. exports = xxx 表示当前模块导出一个单成员 ,结果就是XXX。
5.如果需要导出多个成员时必须使用exports.add=xxx; exports.foo = xx;或者使用
module. exports.add = xxx; module. export.foo = xxx; 。
常用的npm命令行
- npm -v :查看npm版本。
- npm init :初始化后会出现一个package. json配置文件。可以在后面加上-y ,快速跳过问答式界面。
- npm install :会根据项目中的package. json文件自动下载项目所需的全部依赖。
- npm install 包名--save- -dev(npm install 包名-D):安装的包只用于开发环境,不用于生产环境,会出现在package. json文件中的devDependencies属性中。
- npm insta11 包名--save(npm insta11 包名-S):安装的包需要发布到生产环境的,会出现在package.json文件中的dependencies属性中。
- npm list:查看当前目录下已安装的node包。
- npm list -g:查看全局已经安装过的node包。
- npm --help:查看npm帮助命令。
- npm update包名:更新指定包。
- npm uninstall 包名:卸载指定包。
- npm config list :查看配置信息。
- npm 指定命令--he1p :查看指定命令的帮助。
- npm info 指定包名:查看远程gpm.上指定包的所有版本信息。
- npm config set registry https://registry.npm.taobao.org:修改包下载源,此例修改为了淘宝镜像。
- npm root :查看当前包的安装路径。
- npm root -g :查看全局的包的安装路径。
- npm 1s包名:查看本地安装的指定包及版本信息,没有显示empty。
- npm 1s包名-9 :查看全局安装的指定包及版本信息,没有显示empty.1. npm -v :查看npm版本。
Nodejs-文件读取篇
先在D盘建一个fs文件 然后打开
var fs = require('fs');
//导入文件
//node 读写文件也有同步和异步的接口 默认是异步
//同步
var fd = fs.openSync('hello.txt','r')
console.log(fd);
var buf = Buffer.alloc(20);
var content = fs.readFileSync('hello.txt',{flag:'r',encoding:'utf-8'})
console.log(content.toString);
结果
PS D:\Node-projects\fs> node index.js
3
[Function: toString]
稍微理解一下 [ ]表示可选项
//异步
fs.readFile('hello.txt',{flag:'r',encoding:'utf-8'},function(err,data){
if(err){
console.log(err);
}else{
console.log(data);
}
console.log(77);
})
console.log(333);
结果
PS D:\Node-projects\fs> node index.js
333
hello bunny
77
异步的封装 用promise来封装
//封装
//如果是promise对象就可以进行封装
function fsRead(path){
return new Promise(function(resolve,reject){
fs.readFile(path,{flag:'r',encoding:'utf-8'},function(err,data){
if(err){
// console.log(err);
//失败执行的内容
reject(err)
}else{
// console.log(data);
//成功执行的内容
resolve(data)
}
// console.log(77);
})
//console.log(333);
})
}
//封装好之后 读文件
var w1 = fsRead('hello.txt')
w1.then(function(res){
console.log(res);
})
//如果读多个文件
async function ReadList(){
var file2 = await fsRead('hello.txt');
console.log(file2);
var file3 = await fsRead("hello2.txt");
console.log(file3);
var file3Content = await fsRead("hello3.txt");
console.log(file3Content);
}
//有了这个就不用层层回调了
ReadList()
结果
PS D:\Node-projects\fs> node index.js
hello bunny
hello bunny
hello2:今天是2021.4.1
hello3
关于Nodejs的学习还会继续更新哦,文中如若有错误的地方,请大佬留言
在这里推荐一篇比较通俗易懂的Nodejs学习笔记的文档,帮助我理解了不少东西。好东西要分享一下:https://www.cnblogs.com/minjh/p/9531225.html.
1.Nodejs中文官网:http://nodejs.cn.
2.Nodejs API:http://nodejs.cn/api/.
3.npm中文网:
https://www.npmjs.cn.