NodeJS学习笔记

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})

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值