如何将所有app.use放在单独的公用文件中

时间:2019-01-12 17:06:17

标签: javascript node.js express

我的应用程序索引/起点中有多个app.use。

Where
    F.[Datetime] >= @fromDate
    AND F.[Datetime] <= @toDate
    AND Em.Name IN (@Name)
    AND F.[time] >= @fromtime
    AND F.[time] <= @totime

以此类推。

现在,这使我的代码不整洁(在index.js中),因此我考虑创建一个单独的js文件(例如app.use( if (!req.contextToken && req.contextTokenchecked) { req.queryToFirebase = false; req.contextTokenchecked = true; req.contextToken = {} } next() ) app.use(//Do something 2) ),该文件将包含我所有的intialize.js

到目前为止,我习惯于仅创建单独的路线

app.use

,然后将其导入我的index.js

const express = require('express')
const router = express.Router() 

但是这次我不希望我的路线位于单独的文件中,而是全部

app.use('/auth', auth)

在一个common.js文件中

第二,我还有一条从gmail(gmail.js)加载数据的路由。

app.use() 

当前,在所有路由中,我都在手动添加中间件app.use('/gmail', gmail) 。是否可以做一些事情,使isLoggedIn里面的所有路由都继承该中间件

1 个答案:

答案 0 :(得分:1)

您注册的中间件总是按照注册的顺序执行。因此,如果您有这样的代码:

app.use((req, res, next) => {
   // middleware A
   next()
})

app.use((req, res, next) => {
   // middleware B
   next()
})

app.use(middlewareC)

app.use('/gmail', gmail)

然后,您可以确定在app.use('/gmail', gmail)之前为这些中间件创建一个公用文件:

common.js

let router = express.Router()

router.use((req, res, next) => {
   // middleware A
   next()
})

router.use((req, res, next) => {
   // middleware B
   next()
})

router.use(middlewareC)

module.exports = router

main.js

app.use(require('./common.js'))

app.use('/gmail', gmail)

use(或任何其他注册方法)的API为([path,] callback [, callback...])

因此,您可以根据需要注册尽可能多的中间件作为回调,因此可以在isLoggedIn路由器前面添加gmail

app.use('/gmail', isLoggedIn, gmail)