Node.js服务端05-express框架

93 阅读3分钟

基本使用

const express =  require('express')

const app = express()

app.get('/', (req, res) => {
  res.send('hello express')
  res.end()
})

app.listen(3000, () => {
  console.log('server start');
})

send方法可以对HTML代码段解析

const express =  require('express')

const app = express()

app.get('/', (req, res) => {
  res.send(`
  <h1>good </h1>
  `)
  res.end()
})

app.listen(3000, () => {
  console.log('server start');
})

send发送接口

app.get('/', (req, res) => {
  res.send({
    name: 'gfred',
    age: 26
  })
  res.end()
})

中间件

在express中,调用get传入箭头函数,箭头函数在这里也可以叫做中间件,可以传入多个中间件,中间件可以抽取出来,在中间件位置可以直接传入数组,数组里面是中间件,中间件中第三个参数next判断是否继续执行下面的中间件。

//占位符 随机输入即可
//箭头函数,也可以叫做中间件,express,可以使用多个中间件
//第三个参数next来判断,是否继续执行下一个中间件
const func1 = (req, res, next) => {
  console.log('验证token');
  //可以添加判断,是否执行下一个中间件
  const isValid = true
  if (isValid) {
    next()
  } else {
    //返回错误
    res.send('error')
  }
  
}

const func2 = (req, res) => {
  res.send({
    name: 'haha',
    age: 47
  })
  res.end()
}
app.get('/login/:id', [func1, func2])

中间件通信

中间件1 res自定义属性,中间件2 res访问自定义属性

//占位符 随机输入即可
//箭头函数,也可以叫做中间件,express,可以使用多个中间件
//第三个参数next来判断,是否继续执行下一个中间件
const func1 = (req, res, next) => {
  console.log('验证token');
  //可以添加判断,是否执行下一个中间件
  const isValid = true
  if (isValid) {
    res.dataValue = 'data'
    next()
  } else {
    //返回错误
    res.send('error')
  }
  
}

const func2 = (req, res) => {
  console.log(res.dataValue);
  res.send({
    name: 'haha',
    age: 47
  })
  res.end()
}
app.get('/login/:id', [func1, func2])

应用级中间件

use()方法会挂载到整个应用上,每个位置都会先执行func1 如下

//占位符 随机输入即可
//箭头函数,也可以叫做中间件,express,可以使用多个中间件
//第三个参数next来判断,是否继续执行下一个中间件
const func1 = (req, res, next) => {
  console.log('验证token');
  //可以添加判断,是否执行下一个中间件
  const isValid = true
  if (isValid) {
    res.dataValue = 'data'
    next()
  } else {
    //返回错误
    res.send('error')
  }
  
}

//应用级中间件
app.use(func1)

const func2 = (req, res) => {
  console.log(res.dataValue);
  res.send({
    name: 'haha',
    age: 47
  })
  res.end()
}
app.get('/login/:id', [func2])

路由级中间件


const express =  require('express')

const app = express()
const IndexRouter = require('./router/indexRouter')

app.get('/', (req, res) => {
  res.send({
    name: 'gfred',
    age: 26
  })
  res.end()
})

//占位符 随机输入即可
//箭头函数,也可以叫做中间件,express,可以使用多个中间件
//第三个参数next来判断,是否继续执行下一个中间件
const func1 = (req, res, next) => {
  console.log('验证token');
  //可以添加判断,是否执行下一个中间件
  const isValid = true
  if (isValid) {
    res.dataValue = 'data'
    next()
  } else {
    //返回错误
    res.send('error')
  }
  
}

//应用级中间件
app.use(func1)

//应用级中间件,IndexRouter里面是路由级中间件
app.use('/', IndexRouter)

app.listen(3000, () => {
  console.log('server start');
})

const express = require('express')

const router = express.Router()
//路由级
router.get('/home', (req, res) => {
  
  res.send({
    news: '地球连续35年收到神秘规律性信号',
    time: '7.21'
  })
  res.end()
})

router.get('/login', (req, res) => {
  
  res.send({
    name: 'haha',
    age: 47
  })
  res.end()
})

module.exports = router

错误中间件

错误中间件要放在最后

//错误中间件
app.use((req, res) => {
  res.status(404).send('丢了')
})

post请求

post请求与前面基本一致

res.body获取参数

解析需要注意,配置对应的解析参数类型

//配置解析post参数中间件
app.use(express.urlencoded({extended:false}))
//解析json串
app.use(express.json())

app.use('/login', LoginRouter)
app.use('/home', HomeRouter)

//错误中间件
app.use((req, res) => {
  res.status(404).send('丢了')
})

app.listen(3000, () => {
  console.log('server start');
})
const express = require('express')

const LoginRouter = express.Router()

LoginRouter.post('/', (req, res, next) => {
  console.log(req.body);
  res.send({ok:1})
  res.end()
  // next()
})

module.exports = LoginRouter

配置静态资源

//配置静态资源
app.use(express.static('public'))

访问静态资源不需要写文件夹名

生成器

安装生成器,最好加上--view=ejs否则创建的是jade格式

npm install -g express-generator

//之后通过express xxx创建项目
express xxx --view=ejs

创建之后记得安装库npm install,之后会看见以下目录

其中app.js会看到如下代码

调试时改成nodemon会更方便