用途: 檢查類 (Number(req.params.id) !== helpers.getUser(req).id)
注入類 passport.js ⇒ req.user
問題:後面的要看前面的 middleware 才會知道,所以 typescript or 文件
router.get(’/posts’, m1, myselfMiddleware, m2)
// req.self boolean
myselfMiddleware = (req, res, next) ⇒ {
if(!req.user) {
next(new Error(’user 不能是空的’))
}
[req.params.id](<http://req.params.id/>)
// m2 inputs
if(Number([req.params.id](<http://req.params.id/>)) !== req.user.id) {
req.self = false
next(new Error(’只能自己’))
} else {
req.self = true
next()
}
}
m2 = (req, res, next) ⇒ {
console.log(req.self)
next()
}
m2error1 = (err, req, res, next) ⇒ {
console.log(err)
next(err)
}
m2error2 = (err, req, res, next) ⇒ {
console.log(err)
res.end('dddd')
res.json('dddd')
res.render('view')
}
app.use(m2error2)
app.use(m2error1)
壞味道:二次以上
assert 套件
assert module
assert(req.user, ‘ User 不存在’) ⇒ if(XXX) throw new Error()
export function assertNotEmpty<T>(value: T, message?: string | Error): asserts value is NonNullable<T> {
assert(value, message || 'value should not be empty');
}
// example
let v: string | undefined = undefined
v => string | undefined
assertNotEmpty(v)
v => string
XXX.d.ts → plain js + definition
xxxx.ts. → typescript
key words: type , interface, export , ts generic
id = 0 => pass
if (!Number(id)) throw new Error('Params id is required.')
if (id !== undefined || () ) throw new Error('Params id is required.')
'' / 0 / undefined / null