1.是什么?
NodeJS是一个开源的跨平台的JS运行环境,其本质是一个应用程序,用来运行JS;可以作为后台服务端。
2.作用?
(1)开发服务器应用。(2)开发工具类应用。(3)开发桌面端应用。
Tips:
1、它和WebJS的核心语法都是ECMAScript,但是不用使用BOM,DOM,AJAX等的API,其共同API有console和定时器。
2、NodeJS中的顶级对象是global,globalThis
3、let和var作用域不同,let类似局部变量,在let声明之前不可使用,在同一作用域中不可重复声明,var声明的参数可以在声明之前使用,不过值是undefine。
4、const声明只读常量,其指向的地址不可被改变,所以声明时必须赋值,同样也只能在声明之后使用。该命令只保证了地址不可被改变和Java的final相似,如果修饰一个对象,对象内部的值是可以被改变的。
3.各模块重点学习内容
Buffer
类似数组,表示固定长度的字节序列,用来处理二进制数据,性能好可以直接操作内存,每个元素1个字节。(需要注意溢出)
Fs模块
文件操作模块,使用前需要导入FS模块(require('fs'));
异步写入(writeFile),回调函数通过任务队列返回结果,成功会返回null,失败会返回对象,可以利用参数进行追加{flag:'a'};
同步写入(writeFileSync);
异步同步追加(appendFile/...Sync);
文件流式写入(createWriteStream)和文件创建传输通道,追加写,需要注意关闭流通道。适合大文件写入或频繁写入,效率高,不适合一次写入,创建销毁通道有开销。
文件读取(readFile/readFileSync)读回的数据为Buffer。
文件流读取(createReadStream)按块读取64KB,需要使用on来绑定data事件,每读一块会回调一次。
文件重命名和移动(rename)和linux命令的mv用法很像
文件删除(unlink,rm:nodejs14.4引入)其区别是rm可以用来删除文件夹。
创建读取删除文件夹(mkdir/readdir/rmdir)都有同步方法;可以递归创建文件夹,但是需要增加参数(recursive:true);注意读取方法返回的不是Buffer而是数组;只能删除空文件夹。
查看资源状态(stat)
遍历
ls.forEach(item => {}) 箭头函数
Path模块
( 模块的使用都需要导入)解析路径,获取相关信息
_dirname(当前文件夹绝对路径)_filename(当前文件绝对路径) path.resolve(拼接绝对路径)
HTTP模块
创建服务对象createServer((request,response) => {}) => 监听端口 listen,服务器被访问时,回调函数执行,可以操作请求和响应。
模块化
将一个复杂程序依据一定的规则拆分成多个文件的过程。模块内部数据私有,但是可以对外暴露。
优点:1.防止命名冲突 2.低耦合 3.高内聚
对外暴露:module.exports={} exports.XX=XX 区别:exports是module.exports的引用,exports可以不断添加,而module.exports会覆盖前面的。
导入文件夹时会去寻找package.json文件中main属性所对应的文件是否存在,存在则不导入,不存在或者package.json不存在,默认导入index.js和index.json,如果还不存在就报错。
express框架
基本格式:1.导入express const expresss=require('express'); 2.创建应用对象 const app=express(); 3.创建路由app.get('/local',(req,res) => {}); 4.监听端口 app.listen(3000 , () => {})。
创建路由:路由确定应用程序如何响应客户端对特定端点的请求。由请求方式,请求路径和回调函数组成。app.get('/:id.html',(req,res)->{})使用通配符的形式,通过req.params.id来获取id。
在数组对象中获取对应字段匹配数据arr.find(item=>{if(item.id===Number(id)){retrun true}})
重定向:res.redirect,下载文件res.dowload,JSON响应res.json({xx:aa})
中间件:Middleware,本质是回调函数,中间件函数可以像回调函数一样访问req和res,其作用是使用函数封装公共操作,简化代码。
全局中间件:Function xx(req,res,next){} 需要调用next()继续执行回调函数,app,use(xx);像拦截器和JavaAOP实现方法增强。
路由中间件:在申明函数之后,放在需要增强的方法参数中。
静态资源中间件:app.use(express.static(_dirname+'/public'));需要注意当静态资源和路由规则同时匹配上,由自上而下的顺序进行匹配。
获取请求体数据:body parser,解析json格式bodyParser.json()。解析querystring格式bodyParser.urlencoded({extended:false})这个解析到的值在路由req.body中。
防盗链,声明中间件:检测请求头中的referer。
路由模块化:使用express.Router()来创建路由对象,暴露router。
模板引擎EJS:是分离用户界面和业务数据的技术 require('ejs') 使用ejs渲染 ejs.render('XXX<%=aa%>',{aa:aa})