Создание запроса на получение из запроса на получение - PullRequest
0 голосов
/ 20 марта 2019

Я довольно новичок в node.js и express, и мне было интересно, есть ли способ определить маршрут, который вызывает другой маршрут просто для сбора данных, а не для полного перенаправления.

У меня есть маршрут, настроенный следующим образом:

app.get("/databases/list", function(req, res) {
    db.listDatabases().then(names => {
        res.send(names);
    });
});

Впоследствии я хотел бы выбрать другой маршрут, скажем:

app.get('/whatever', function(req, res) {
    // here I'd like to make a call to retrieve the information from the first route 
    // then I'd like to do something with that information, I want to stay in the same route.
}

Этовозможно

Ответы [ 3 ]

0 голосов
/ 20 марта 2019
app.get("/databases/list", async function(req, res) {
    return await db.listDatabases();
});

app.get('/whatever', async function(req, res) {
    const result = await fetch('path/databases/list');
    console.log(result)
});

Это может помочь вам, но это не рекомендуется.Вы можете создать метод (обычный где-то в контроллере) и использовать его везде, где вам нужно.

0 голосов
/ 20 марта 2019

Расширяя ответ @marcobiedermann, в вашем случае просто создайте контроллер и используйте ФУНКЦИЮ в обоих маршрутах. Вам не нужно ничего получать.

/// --- Controller ----
class SimpleController { 
    constructor(db){
        this.db = db;
    }
    listDatabase(/*maybe optional callback*/){
        return  this.db.listDatabases();//or something....
    }
    whatever(/*maybe optional callback*/){
        return this.listDatabase()
        .then(process)
    }
}

/// --- Routes ----
const sController = new SimpleController(db);
app.get("/databases/list", function(req, res) {
    sController.ListDatabase().then(names => {
        res.send(names);
    });
});

app.get('/whatever', function(req, res) {
    sController.whatever()
    .then(....)
}
0 голосов
/ 20 марта 2019

Да, это возможно.Вы должны получить данные из своей первой конечной точки.

fetch('/databases/list')
  .then( … )

Для этого необходимо определить маршрут /databases/list перед вашим маршрутом /whatever.

Однако я настоятельно советую вамНЕ делать этого.

Вы должны абстрагировать свою логику в контроллер и вызывать этот контроллер на обоих ваших маршрутах:

const fetchController = {
  fetchData: () => {
    return fetch('path/to/data/to/fetch')
        .then( … )
    // or database call or wherever you might get the data from

  }
}

app.get('/databases/list', (req, res) => fetchController.fetchData());
app.get('/whatever', (req, res) => fetchController.fetchData());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...