在package.json中src配置:
"scripts": {
"start": "node src/index.js"
},
以上即可使用npm start启动服务
node自动重启工具
cnpm install --save-dev nodemon
修改启动 命令
"scripts": {
"start": "nodeMon src/index.js"
},
但是上面之后修改任何文件都可以重启,浪费资源
可以通过配置文件解决
新建nodemon.json文件
{
"watch": [
"src/**/*.js"
]
}
使其只监听src下面的文件夹下的js文件
const express = require('express')
//一个express的实例
const app = express()
app.get('/user/:age', (req, res) => {
res.json({
name: 'zhangsan'
})
})
app.post('/list/imgList', (req, res) => {
res.json({
name: 'imgList',
list: [
{
name: '图1'
},
{
name: '图2'
}
]
})
})
app.listen(3000,()=>{
console.log('启动成功')
})
//以上执行之后就可以在浏览器访问到所返回的json数据
app.all('*',(req,res)=>{
res.json({
message:'demo',
method:req.method,
url:req.path
})
})
也可以使用app.use实现上面app.all的忽略方法和响应任何url,但是不推荐这样使用它
app=>application=》web服务的实例
express.Router
member/shopList/userList
member.router.js
const express = require('express')
const router = express.Router()
router.get('/list', (req, res) => {
res.json({
list: [
{
id: '001',
name: 'helene'
}
]
})
})
module.exports = router
const memberRouter = require('./member.router')
app.use(memberRouter) //使用app.use中间件将路由注册进来
//app.use()可以写两个参数,第一个参数是路由拼接的前缀路径,如:
app.use('/member',memverRouter)// /member/list
中间件组成:
1、是一个函数
2、参数,err=》对象,req=》对象,res=》对象,next=》函数
自己实现中间件:
function demo_middlewarwe(err,req,res,next){
//1.异常处理
//2.处理业务功能,转交控制权=》next
//3.响应请求=>结束响应=》当做路由的处理函数
}
中间件级别:
1、app级别的使用
注册时候,一定是在最顶级
app.use=>api去加载进来
function log_middleware(req, res, next) {
console.log('请求来了')
next()
}
app.use(log_middleware())
以及上面路由拆分的例子也是app级别中间件
2、路由级别
写法一:
router.use(function (req,res,next) {
console.log('路由级别')
next()
})
写法二:
router.get('/list', [valid_name_middleware],(req, res) => {
res.json({
list: [
{
id: '001',
name: 'helene'
}
]
})
})
//写法二,第二个参数传递的就是中间件,参数是一个数组,可以使用多个中间件,链式调用
在中间件进行处理的时候还可以给req额外传递参数:
req.formata = {
name:'',
password:''
}
3、异常处理=》app级别=》router级别
// 以下就是一个中间件:
//text?name=123
function valid_name_middleware(req, res, next) {
let {name} = req.query
if (!name || !name.length) {
res.json({
message: '缺少name参数'
})
} else {
next()
}
}
// (1)
router.all('*', valid_name_middleware)
// (2)
router.get('/list', (req, res) => {
res.json({
list: [
{
id: '001',
name: 'helene'
}
]
})
})
1、异常捕获
express框架已经能够把所有异常都捕获到
2、express内置异常处理
3、自定义异常处理
使用app.use()自定义中间件进行异常处理
app.use(function (err, req, res, next) {
if(err){
console.error(err.stack)
res.status(500).send('Something broke!')
}else{
next()
}
})
异常处理通常是批量的,不能哪个路由模块都设置一次
如何处理404错误
function not_found_handle(req, res, next) {
//404不是异常,所有err对象时空的
res.json({
message: 'api不存在'
})
}
app.use(not_found_handle)
404错误处理中间件也要写要其他路由最后面
//异常处理要在其他所有路由最后