基本使用
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会更方便