node学习express框架,以及基本用法,配置,第三方库(主要是自己做笔记)

本文详细记录了Node.js中使用Express框架的过程,包括安装与基本配置,使用`express.static`链接静态资源,定义及理解中间件机制,内置和自定义中间件的使用,接口模块化设计,以及在处理POST请求时`express.urlencoded()`的配置。同时强调了在处理GET和POST请求时数据接收的不同方式。

express

一.1.每个文件都需要用到的配置项

安装express 框架和导入以及使用
npm i express
安装nodemon可以实施检测数据的变化自动重启服务器以前 (node 文件名)
(nodemon 文件名)

// 创建node服务器
// 导入express
const express = require('express')
// 创建web服务器,把express放在app实例上
const app = express()
//注册全局
app.use()
//使用app.listen方法启动服务器,listen是最后
app.listen(80,()=>{
    console.log('服务器启动成功');
})

2.例子以及开始编写express基本用法

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

// 监听客户端get和post请求,并向客户端响应具体的内容
app.get('/users',(req,res)=>{
    // 调用express服务器,内置函数res.send()
    res.send({name:'张三',age: 12,gender:'男'})
    console.log("失败");
})

app.post('/user',(req,res)=>{
    res.send("请求成功")
    console.log("成功");
})

app.get('/',(req,res)=>{
    // 通过req.query可以获取到客户端发送过来的查询参数,通常情况下是空对象{}
    res.send(req.query)
    // console.log("失败");
})
 //:后面的参数可以自己定义传参,可以传入多个动态参数,而且是有个必须传入几个
app.get('/user/:id/:name',(req,res)=>{
    // req.params是匹配动态到URL地址,默认也是一个空对象
    res.send(req.params)
    // console.log("失败");
})  
app.listen(80,()=>{
    console.log('服务器启动成功');
})

3.使用express.static方法链接静态资源

static里是文件静态资源,如果你的文件(我的是dist)里有多个静态页面,以index.html为主。
static也是express内置模块(我暂且叫他内置模块)

const express = require("express");

const app = express()

//app.use(express.static("./dist"))

// 挂在路径前缀
app.use('/abc',express.static("./dist"))
app.listen(80,()=>{
    console.log("自己的主机ip,例如http://192.168.3.115");
})

4.定义中间件

这里主要说一下中间件里面next()函数,如果你不配置next将不会往下传递(不往下运行)
中间件说白了就跟vue里面的请求拦截器一个道理

const express = require('express')

const app = express()

// 中间件
const vm = function(req,res,next) {
    // console.log("最简单的中间件");
    // 添加时的中间件
    const tiems = Date.now()
    // req后面跟着一个自定义的属性
    req.statrtiem = tiems
    next()
}

// 将vm注册为全局生效的中间件
app.use(vm)

app.get('/',(req,res)=>{
    // console.log("你好阿三打撒会计分录");
    res.send("你好阿三打撒会计分录" + req.statrtiem)
})

app.get('/user',(req,res)=>{
    // console.log("你好阿三打撒会计分录");
    res.send("是否调用中间件" + req.statrtiem)

})

app.listen(80,()=>{
    console.log("http://192.168.3.115");
})


5.局部生效中间件

const express = require('express')

const app = express()

const mw1=function (req,res,next) {
    console.log("sadadas");
    next()
}


app.get('/',mw1,(req,res)=>{
    res.send("Home Page")
})

app.get('/user',(req,res)=>{
    res.send("Home Pages")
})
	
app.listen(80,(req,res,next)=>{
    console.log("http://192.168.3.115");
})

6.内置中间件express.json(),app.use(express.urlencoded({ extended: false }))和第三方中间件body-prser

const express = require('express')

const app = express()

// 配置json中间件
app.use(express.json())

// 通过express.urlencoded来解析url里的enced-url的数据
app.use(express.urlencoded({ extended: false }))


// 第三方express中间件
// const parser = require('body-prser')

// app.use(parser.urlencoded({ extended: false }))

app.get('/', (req, res) => {
    // req.body可以接收客户端发送的请求体
    console.log(req.body);   //默认情况下没有配置表单中间件,则undefined 
    res.send("你好阿三打撒会计分录")
})

app.post('/user', (req, res) => {
    console.log(req.body);
    res.send("你好阿三打撒会计分录")
})

app.listen(80, () => {
    console.log("http://192.168.3.115");
})

7.自定义中间件,模块化中间件

这个是父.js

const express = require('express')

const app = express()
// 导入node内置模块


const sns = require('./封装内置组件')


app.use(sns)

app.post('/user', (req, res) => {
    // console.log(req.body);
    res.send(req.body)
})

app.listen(80, () => {
    console.log("http://192.168.3.115");
})

子.js


const qs = require('querystring')

const ssr = (req,res,next)=>{
    let str =''

    req.on('data',(chunk)=>{
        str  += chunk
    })
    req.on('end',()=>{
       
     const body =  qs.parse(str)
     req.body = body
     console.log(body);
     next()
    })
    
}

module.exports = ssr

8.定义错误的中间件

const express = require('express')

const app = express()


app.get('/',(req,res)=>{
    throw new Error("服务器发生了错误   ")
    res.send("Home Page")
})

// 定义错误的中间件,捕获整个项目的异常,这个中间件必须在所有路由之后,不然不会捕获

app.use((err,req,res,next)=>{

    res.send(err.message)
    next()
})

app.listen(80,()=>{
    console.log("http://192.168.3.115");
})

9.接口模块化

父.js

// 最简单的路由用法

const express = require('express')

const app = express()
// 挂在路由,基本用法
// app.get("/",(req,res)=>{
//     res.send("你好get")
// })
// app.post("/",(req,res)=>{
//     res.send("你好post")
// })


const router = require('./routerModule.js')

// 路由模块前面加前缀
app.use('/api',router)

app.listen(80,()=>{
    console.log("http://192.168.3.115");
})

子.js

const express = require('express')

const app = express()

// 路由模块化,创建路由对象
const router = express.Router()

// 挂载具体路由
router.get('/user/lsit',(req,res)=>{
    res.send("这是list接口")
})

router.post('/user/add',(req,res)=>{
    res.send("这是add添加   接口")
})


module.exports = router

补充:定义接口的时候data数据接收get请求用req.query,而post用req.body,如果post你访问成功了,但是在postman接口查看参数没有,需要配置app.use(express.urlencoded({ extended: false }))。

失败示例(但也请求成功,但是服务器响应不到你的数据):

在postman里面出现这种情况就需要配置express.urlencoded来解析url里的enced-url的数据
 {
  		status:0,
        msg:"数据请求成功",
 }

成功示例(如果没有数据会返回空数组):

 {
  		status:0,
        msg:"数据请求成功",
        data:{}
 }

好了就总结到这里,小手冰凉的我要继续学习node.js,继续卷(dog)!!!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值