Javascript 如何在没有承诺的情况下返回函数中的值(访问令牌)?

Javascript 如何在没有承诺的情况下返回函数中的值(访问令牌)?,javascript,node.js,api,express,spotify,Javascript,Node.js,Api,Express,Spotify,我有一个导出为模块的函数,因此我可以在主app.js中用作中间件函数,在登录后,spotify重定向到/callback 由于我不能将其作为承诺,并在它之后使用检索值。然后,我想知道如何获取登录另一个模块后生成的access\u令牌 提前感谢您。您可以在中间件之间共享价值,并在req中定义它。为了更简单的解释,以下是一个示例: const callback = (req, res) => { // your application requests refresh and acces

我有一个导出为
模块
的函数,因此我可以在主
app.js
中用作
中间件
函数,在登录后,spotify重定向到/callback

由于我不能将其作为承诺,并在它之后使用检索值。然后,我想知道如何获取登录另一个
模块后生成的
access\u令牌


提前感谢您。

您可以在中间件之间共享价值,并在req中定义它。为了更简单的解释,以下是一个示例:

const callback = (req, res) => {

  // your application requests refresh and access tokens
  // after checking the state parameter

  if (state === null || state !== storedState) {
   ...
  } else {
    res.clearCookie(stateKey);
    var authOptions = {...};

//rq = require-promise
    rq.post(authOptions, function(error, response, body) {
      if (!error && response.statusCode === 200) {

        var access_token = body.access_token,
            refresh_token = body.refresh_token;

        // we can also pass the token to the browser to make requests from there
        res.redirect('/#' +
          querystring.stringify({
            access_token: access_token,
            refresh_token: refresh_token
          }));
      } 
    });
  }
};
它将共享给另一个中间件:

// the first middleware : checkAuth.js
const jwt = require('jsonwebtoken')

const authValidator = async (req,res,next) => {
  // check token as requirement for auth user
  let token = req.headers['authorization']
  try {
    let verifiedUser = await jwt.verify(token, 'yoursecret', (err, decode) => {
      if (err) return res.send(err.message)
      return decode
    })
    // assign verifiedUser to req
    req.userData = verifiedUser
    // passing to next middleware
    next()
  } catch (err) {
    return res.send('no token provided')
  }
}

exports.authValidator = authValidator
通过这条路线,您可以获得所有:

// second middleware : checkRole.js
const roleUser = async (req,res,next) => {
  try {
    // call the req.UserData and assign other value
    if (req.UserData) req.userRole = 'Administrator'
    // passing to next middleware
    next()
  } catch (err) {
    return res.send('ooppsss')
  }
}

exports.roleUser = roleUser

您可以在中间件之间共享值,并在req中定义它。为了更简单的解释,以下是一个示例:

const callback = (req, res) => {

  // your application requests refresh and access tokens
  // after checking the state parameter

  if (state === null || state !== storedState) {
   ...
  } else {
    res.clearCookie(stateKey);
    var authOptions = {...};

//rq = require-promise
    rq.post(authOptions, function(error, response, body) {
      if (!error && response.statusCode === 200) {

        var access_token = body.access_token,
            refresh_token = body.refresh_token;

        // we can also pass the token to the browser to make requests from there
        res.redirect('/#' +
          querystring.stringify({
            access_token: access_token,
            refresh_token: refresh_token
          }));
      } 
    });
  }
};
它将共享给另一个中间件:

// the first middleware : checkAuth.js
const jwt = require('jsonwebtoken')

const authValidator = async (req,res,next) => {
  // check token as requirement for auth user
  let token = req.headers['authorization']
  try {
    let verifiedUser = await jwt.verify(token, 'yoursecret', (err, decode) => {
      if (err) return res.send(err.message)
      return decode
    })
    // assign verifiedUser to req
    req.userData = verifiedUser
    // passing to next middleware
    next()
  } catch (err) {
    return res.send('no token provided')
  }
}

exports.authValidator = authValidator
通过这条路线,您可以获得所有:

// second middleware : checkRole.js
const roleUser = async (req,res,next) => {
  try {
    // call the req.UserData and assign other value
    if (req.UserData) req.userRole = 'Administrator'
    // passing to next middleware
    next()
  } catch (err) {
    return res.send('ooppsss')
  }
}

exports.roleUser = roleUser