当前位置: 首页 > 后端技术 > Node.js

挂笔记复习node.js基础

时间:2023-04-03 17:08:16 Node.js

nodejs模块化模块分类:内置模块、自定义模块(需要补全路径)、第三方模块require('加载模块时会执行加载的代码')nodejs模块化具有模块作用域,不能直接访问导入到模块中的变量。自定义模块中有一个模块对象,可以通过module.exports对外共享。自定义模块中有导出对象。默认情况下,它们指向与module.exports相同的对象。require()将始终是module.exportscommonjs规范:在每个模块内,模块变量代表当前模块。模块变量是一个对象,它的export属性(即module.exports)是对外的接口。require一个模块,其实就是加载模块的module.expoorts属性。内置三个模块文件模块加载模块letfs=require('fs')用于读取指定文件中的内容fs.readFile('./test.text1','utf8',(err,satastr)=>{console.log(satastr)})用于向指定文件写入内容fs.wirteFile('./file.txt','strtobewritten','可省略,默认utf8',(err)=>{})pathmoduleloadmoduleletpath=requeire('path')文件所在路径console.log(__dirname)路径拼接path.join('urlfragment1','URLfragment2...')完整文件名path.basename(fpath)没有扩展名的文件名path.basename(fpath,'.html')文件扩展名path.extname(fpath)http模块加载模块lethttp=require('http')创建一个实例letserver=http.createServer()绑定请求事件到服务器实例,监听客户端的请求server.on('request',function(req,res){//客户端请求的url地址console.log(req.url)//客户端请求的类型console.log(req.method)//设置响应头:本例为解决返回中文编码问题res.setHeader('Content-Type','text/html:charset=utf-8')//返回一些内容给客户端并结束这个请求。res.end('Welcometovisit')})starttheserverhttp://127.0.0.1')})nodemon自动重启服务,开发时修改代码,无需手动重启npminstall-gnodemon使用nodemonfilename.js命令代替nodeFile.js命令启动serviceexpress基于nodejs,快速,开放,极简的web开发框架(基于http模块)npmiexpress@4.17.1首先简单地创建并启动一个服务importexpressconstexpress=require('express')创建一个服务器实例constapp=express()listenforgetrequestsapp.get('/user',(req,res)=>{})监听post请求app.post('/user',(req,res)=>{})callapp.listen(端口号,启动成功后的回调函数)startserviceapp.listen(80,()=>{})具体配置req请求体和res响应体,获取url后拼接问号的参数。默认是空对象console.log(req.query)获取url后的动态参数(冒号空格),如:'/user/:id',(req,res)=>{})http://127.0.0.1:80/user/22145获取22145部分console.log(req.params)的常见请求体内容格式,可以直接通过已有的中间件获取。json格式需要通过内置中间件app.use(express.json())url编码格式需要通过内置中间件app.use(ecpress.urlexcoded({extended:false}))console.log(req.body)如果没有配置对应的中间件,则req.body的值为undefined或者你也可以通过数据和结束事件获取其他类型的数据。当数据量较大时,可能会多次触发数据,每次都获取到完整数据的一部分req.on('data',(chunk)=>{console.log('chunk是接受的数据这次')})req.on('end',()=>{console.log('数据接收完成')})数据后get和end事件拼接出querystring最后可以使用内置querystring模块处理查询字符串,使用该模块的parse()函数将查询字符串解析为对象格式constbody=require('querystring').parse('str')响应内容res。send({name:'Wukong',age:18,gender:'male'})内置三个中间件解析json格式的数据app.use(express.json())解析URL编码格式的数据app.use(express.urlencoded({extended:false}))加载静态资源app.use(express.static('resourcepath'))app.use('URlprefix:/public',express.static('resourcepath'))自定义中间件中间件回调函数参数中多了一个next参数,函数体最后必须调用next()全局中间件app.get((req,res,next)=>{next()})localmiddlewareComponentapp.get("/user",[//可以通过数组的形式实现多个配置(req,res,next)=>{next()},(req,res,next)=>{next()}],(req,res)=>{})错误级别中间件,回调函数中多了一个err参数,可以捕获请求过程中发生的错误,防止程序崩溃注意!!!error级中间件必须注册在app.use((err,req,res,next)=>{next()})所有路由后面的自定义路由模块自定义路由模块可以单独提取requests方便管理constexpress=require('表达')constapiRouter=express.Router()//监听获取请求示例apiRouter.get('/',(req,res)=>{})module.exports=apiRouter加载路由模块add.use(require('./router'))add.use('URlprefix:/api',require('./router'))