从获取请求中发出获取请求

时间:2019-03-20 07:45:15

标签: javascript node.js rest express routing

我对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 :(得分:0)

是的,这是可能的。 您必须从第一个端点获取数据。

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());

答案 1 :(得分:0)

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)
});

这可能会对您有所帮助,但是不建议这样做。您可以创建方法(在控制器中的某个位置常见),并在需要时使用该方法。

答案 2 :(得分:0)

扩展@marcobiedermann答案,在您的情况下,只需制造一个控制器,然后在两条路径中都使用FUNCTION。您不需要获取任何东西。

/// --- 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(....)
}