Node.js学习笔记(三)

Express

基于node.js的web开发框架

是基于node.js中的http内置模块进一步封装出来的

可做web网站服务器、API接口服务器

一、安装

npm i express@4.17.1

二、创建最基本服务器

①req.query

②req.params

//导入模块
const express=require('express')
//创建web服务
const app=express()

//1.监听客户端的GET和POST请求,并向客户端响应
app.get('/user',(req,res)=>{
    res.send('/user的get请求')
})
app.post('/user',(req,res)=>{
    res.send({name:'xxxx',age:12})
})
//2.客户端传递参数,可用req.query打印
app.get('/',(req,res)=>{
    console.log(req.query);
    res.send(req.query)
})
//3.动态参数req.params
app.get('/:id',(req,res)=>{
    res.send(req.params)
})
//启动web服务器
app.listen(8080,()=>{
    console.log('express server running at http://127.0.0.1:8080');
})

 三、托管静态资源express.static('xxxxx')

//挂载
app.use(express.static('login'))
//挂载访问前缀
app.use('/public',express.static('login'))

四、Express路由

在express中,路由指的是客户端的请求与服务器处理函数之间的映射关系。

Express中的路由分3部分

app.METHOD(PATH,HANDLER)  请求类型、请求地址、处理函数

路由模块.js

//路由模块.js
//导入模块
const express=require('express')
//创建路由对象
const router=express.Router()
//挂载具体路由
router.get('/user',(req,res)=>{
    res.send('user')
})
//向外导出路由对象
module.exports=router

 导入路由模块.js

//导入路由模块.js
const express=require('express')
const app=express()

//导入路由模块
const router=require('./08express路由模块')
//注册路由模块
app.use(router)//添加访问前缀app.use('/api',router)

app.listen(8080,()=>{
    console.log('http://127.0.0.1:8080');
})

五、Express中间件

应用级别中间件、路由级别中间件、错误级别的中间件

next是判断是否中间件的标志

//定义一个简单的中间件
const mw=(req,res,next)=>{
console.log('这是一个中间件')
//把流转关系,转交给下一个中间件或路由
next()
}
//全局生效中间件
app.use(mw)

①全局生效后,每次客户端发起请求都会调用一次中间件(不是一定要全局生效的)

②定义多个

const express=require('express')
const app=express()

const mw1=(req,res,next)=>{
    console.log('1');
    next()
}

const mw2=(req,res,next)=>{
    console.log('2');
    next()
}
app.use(mw1,mw2)
app.use((req,res,next)=>{
    console.log('3');
    next()
})
app.get('/',(req,res)=>{
    res.send('GET')
})

app.listen(8080,()=>{
    console.log('http://127.0.0.1:8080');
})

③局部生效

const mw1=(req,res,next)=>{
console.log('这是一个中间件')
//把流转关系,转交给下一个中间件或路由
next()
}
app.get('/',mw1,(req,res)=>{
res.send('xxxxxxxxx')
})

④错误级别的中间件

防止程序的崩溃

app.get('/user',(req,res)=>{
    throw new Error('服务器内部发生了错误')
    res.send('UESER GET')
})
app.use((err,req,res,next)=>{
    console.log('发生了错误'+err.message);
    res.send('ERROR '+err.message)
})

⑤内置中间件

express.static快速托管静态资源(html、css、图片等)

express.json解析JSON格式

express.urlencoded解析URL-encoded

⑥自定义中间件

六、使用Express写接口 

API接口

//api.js
const express=require('express')
const router=express.Router()

//暴露出去
module.exports=router

//调用.js
const router=require(./api.js)
app.use('/api',router)

apirouter.js
const express=require('express')
const router=express.Router()

router.get('/get',(req,res)=>{
    const query=req.query
    res.send({
        status:0,
        msg:'GETqingqiuchengg',
        data:query
    })
})
//要配置解析表单数据的中间件express.urlencoded,才能拿到数据
router.post('/post',(req,res)=>{
    const body=req.body
    res.send({
        status:0,
        msg:'POSTqingqiuchengg',
        data:body
    })
})
module.exports=router
api.js
const express=require('express')
const app=express()
const router=require('./12apiRouter')
app.use(express.urlencoded({extended:false}))
app.use('/api',router)

app.listen(8080,()=>{
    console.log('http://127.0.0.1:8080');
})

跨域问题:采用CORS解决

npm i cors

require进去,app.use(cors())调用

注意:配置cors要写在路由之前

①三个响应头

②简单请求、预检请求

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值