как передать класс и вызвать функцию класса Javascript - PullRequest
0 голосов
/ 05 июня 2018

У меня есть этот класс JS

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 () не является функцией.

Как передать агенту и получить его методы?

1 Ответ

0 голосов
/ 05 июня 2018

Если вы не используете это на внешнем интерфейсе, вы можете передавать каждую функцию как промежуточное программное обеспечение, пока не будете готовы структурировать свой ответ.Я выполняю проверку на каждом шаге, чтобы убедиться, что в теле запроса есть все необходимое для выполнения операции.Я не уверен, почему вы вызываете то, что похоже на другую функцию промежуточного программного обеспечения внутри фактического определения конечной точки.Вы можете просто связать функции: 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 не сохраняет методы, вам придется переопределить класс на переднеми создать экземпляр из тела ответа

...