如何传递 class 并调用 class 的函数 javascript

how to pass a class and call a class's function javascript

我有这个 JS class

Agent.js

class Agent {
  constructor(agentId) {
    this.agentId = agentId
  }
  getProducts() {
    return arrayOfProducts[]
  }
}

在我的登录过程中,我创建了一个新代理:

login.js

function login() {
  //tl;dr
  var agent = new Agent('123')
  req.user = agent
}

在这里,我将代理传递给另一个函数

index.js

router.get('/dashboard', (req, res, next) => {
      getUserData.dashboard(req.user, res, next)
    }, (req, res, next) => { //res.render...    });

我不想从每个视图传递产品,所以在仪表板上我尝试获取代理数据而不是登录。

getUserData.js

var dashboard = (agent, res, next) => {
    console.log(typeof agent) // returns 'object'
    //get products
    var products = agent.getProducts();
next()
}

module.exports = {
dashboard : dashboard 
}

我收到一条错误消息:

getProducts() isn't a function.

如何传递代理并获取其方法?

如果你不在前端使用它,你可以将每个函数作为中间件传递,直到你准备好构建你的响应。我会对每个步骤执行验证,以确保请求正文具有执行操作所需的一切。我不确定您为什么要在实际端点定义中调用看起来像另一个中间件函数的东西。您可以将函数链接起来:D

class Agent {
  constructor(agentId) {
    this.agentId = agentId
  }
  getProducts() {
    return arrayOfProducts[]
  }
}

function login(req, res. next) 
{
  //tl;dr
  //Just guessing what the query looks like
  let {_id} = req;
  AgentSchema.findById(_id)
  .then(agent => {
  
    var agent = new Agent(agent._id);
    req.agent = agent;
    next();
  })
  .catch(err => err.status(404).json('Not Found'));
}

function dashboard (req, res, next) => {
    let { agent } = req;
    if(!agent) next(createError(400, 'Agent Not Found on Request Body'));
    //get products
    var products = agent.getProducts();
    //Do some stuff *(Maybe send a response)?
};

//Pass login as middleware
router.get('/dashboard', login, dashboard)

不过请注意,如果您尝试在前端使用该方法,JSON 不会保留方法,您必须重新定义前端的 class 和从响应主体构造一个实例