程式碼品質

middleware

用途: 檢查類 (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 套件

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

miscellaneous

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