2017-07-04 31 views
0

我有一個這樣的API:如何從expressjs中的其他api調用api?

app.get('/test', (req, res) => { 
    console.log("this is test"); 
}); 

和另一個API:

app.get('/check', (req, res) => { 
    //I want to call "test" api without redirect to it. 
}); 

我想稱之爲 「試驗」 API中的 「檢查」 API沒有重定向到 「測試」 的API,只是做在「測試」API中的功能。 以上是示例代碼。 '因爲我不'想從「測試」API重寫功能到「檢查」

+0

「從另一個API調用API」的快速方法是在Express服務器內部發送HTTP請求,瀏覽器永遠不會知道內部HTTP調用發生,而不會提及頁面重定向。這對你來說是個好主意嗎?如果是,我很樂意提供一些例子。 – shaochuancs

+0

@shaochuancs請隨時給我一些例子:)我非常感謝 –

+0

不客氣。我已添加了我的答案,請檢查。 – shaochuancs

回答

1

簡單的解決方案是定義一個可以同時使用請求路由來調用的方法。

app.get('/test', (req, res) => { 
    console.log("this is test"); 
    callMeMayBe(); 
}); 

callMeMayBe() 
{ 
    //Your code here 
} 
+0

這聽起來不錯,我會試試看,謝謝 –

2

創建一個通用中間件,需要爲這兩個路由執行。

下面是相同的代碼片段:

app.get('/test', test); 
app.get('/check', check, test); 

檢查測試是其在共同使用的中間件。

1

要「從另一個調用API的API」,一個快速簡便的方法是發送Express服務器內的HTTP請求,瀏覽器將永遠不知道內部HTTP調用發生時,沒有提及頁面重定向。這種設計的好處包括:

  1. 沒有必要更改當前的API設計。
  2. API調用可以像從瀏覽器發送一樣精確。

下面是一個例子:

var http = require('http'); 

router.get('/test', function(req, res) { 
    res.end('data_from_test'); 
}); 

router.get('/check', function(req, res) { 
    var request = http.request({ 
    host: 'localhost', 
    port: 3000, 
    path: '/test', 
    method: 'GET', 
    headers: { 
     // headers such as "Cookie" can be extracted from req object and sent to /test 
    } 
    }, function(response) { 
    var data = ''; 
    response.setEncoding('utf8'); 
    response.on('data', (chunk) => { 
     data += chunk; 
    }); 
    response.on('end',() => { 
     res.end('check result: ' + data); 
    }); 
    }); 
    request.end(); 
}); 

GET /check結果將是:

check result: data_from_test 
1

第一分別定義/test處理功能。
那麼你有兩個選擇。

// ========(1)====== testHandler as another function ============= 
// you can call this function where ever you want. 
var testHandler = function(req, res){ 
    //do something 
} 
app.get('/test', testHandler); 

app.get('/check', function(req, res){ 
    // you can call testHandler function here 
    testHandler(req, res); 
}); 

// ========(2)======= testHandler as a middleware ================= 
// if you want to call testHandler before running check handler function. 
// 
var testHandler = function(req, res, next){ 
    //do something 
    ... 

    next(); 
} 
app.get('/test', testHandler, function(req, res){}); 

app.get('/check', testHandler, function(req, res){ 
    // you can call testHandler function here 
    testHandler(req, res); 
});