如何在Express应用程序的另一个源文件中共享会话对象?

时间:2019-06-10 14:15:31

标签: javascript node.js express

现在,我正在使用Express创建Nuxt.js应用程序,并创建由Express创建的后端服务器。 这次,我将使用“ express-session”和“ passport-twitter”在Express应用程序中创建Twitter登录功能。 BFF使用了My Express后端服务器,它从另一台核心服务器获取用户帐户数据。 因此,我的任务是将Twitter身份验证令牌和秘密令牌发送到另一台核心服务器,以便它响应连接到Twitter帐户的用户数据。然后,我将该用户数据保存在快速会话中。

这是我的编码上下文。 我很麻烦,如何在每个源文件中共享会话对象?

以下是我的护照客户代码。

const passport = require('passport')
const TwitterStrategy = require('passport-twitter').Strategy
const axios = require('axios')
const env = require('./share').env
const session = require('./index').session

passport.use(
  new TwitterStrategy(
    {
      consumerKey: env.twitterConsumerKey,
      consumerSecret: env.twitterConsumerSecret,
      callbackURL: env.twitterCallbackUrl
    },
    async function(token, tokenSecret, profile, done) {
      passport.session.id = profile.id

      profile.twitterToken = token
      profile.twitterTokenSecret = tokenSecret
      const options = {
        headers: {
          'Content-Type': 'application/json'
        }
      }
      const requestData = {
        accessToken: token,
        secret: tokenSecret,
      }
      const response = await axios
        .post(env.apiBaseUrl, requestData, options)
        .then(res => {
          return res.data
        })
        .catch((error) => {
          throw new Error('Bad credentials')
        })
      session.authUser = response
      return done(null, profile)
    }
  )
)

module.exports = { passport: passport }

以下是主服务器代码的一部分。

const session = require('express-session')

...many middleware and config code...

module.exports = {
  session: session
}

我的问题是在另一个文件中共享会话对象的最佳实践是什么?我现在的代码是会话对象已导出,而客户端代码则需要它。 但是我认为这不是好的代码。

请如何共享会话对象或如何编码分段和集成?

0 个答案:

没有答案