2017-07-04 94 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); 
});