在NodeJS / ExpressJS中创buildHTTP请求

我正在构build一个需要向自己发送HTTP请求的NPM模块(正在运行的Web服务器)。 例如:

var url = "http://127.0.0.1:" + (process.env.PORT || 3000) + path; request(url, function(error, response, body){ ... }); 

有没有办法通过NodeJSpipe道处理请求,而没有实际执行HTTP请求?

还是有更好的方式来形成的url? 我很紧张, 127.0.0.1不是处理生产站点的最强大的方法。

自我使用JSON API

在自消耗的JSON API中,您可以在一些独立的控制器函数中定义一些function,然后将function连接起来以表示事实。 我们以一个库应用程序为例:

books.js

 module.exports = { browse: function () { return Book.findAll() }, read: function (options) { return Book.findById(options.book) }, processLateFees: function () { // Do a bunch of things to process late fees } } 

到http.js

在这个文件中,我们构build了一个将控制器函数转换为HTTP路由的函数。 我们把查询参数作为选项传给我们的控制器:

 module.exports = function toHTTP (func) { return function (req, res) { func(req.params).then(function (data) { res.send(data) }) } } 

router.js

然后我们把我们的控制器连接到我们的http路由器

 var express = require('express') var books = require('./books') var toHTTP = require('./to-http') var app = express() app.get('/books', toHTTP(books.browse)) app.get('/books/:book', toHTTP(books.read)) app.get('/batch-jobs/process-late-fees', toHTTP(books.processLateFees)) 

所以我们现在有一个快速的应用程序连接到控制器的function。 而奇妙的是,我们也可以手动调用这些控制器function。

 var books = require('./books') books.processLateFees().then(function () { // late fees have been processed }) 

如果您需要更深入的示例, Ghost博客代码库目前是围绕此模式构build的。 这是一个非常丰富的阅读。

如果您只有一个nodejs应用程序,那么您可以将该方法放入模型或控制器中,并在应用程序内部调用该方法,所需资源less于创build新请求的资源。

如果您有多个nodejs应用程序(或其他服务),则通常使用特定的URL和端口创build对其他Web服务的请求。

我在我的一个项目中做,并且工作正常。 到目前为止,我在dev和prod中使用它没有问题,因为我使用了几个nodejs应用程序和3个不同的web服务,这些服务调用它们自己来login或检查auhtentication。 我使用express.js和sails.js(基于express.js)

我认为使用请求模块是可以接受的,这是相当快的,我使用这种方法,当我做unit testing

你可以使用Axios,这是一个基于Promise的HTTP客户端,用于浏览器和node.js。 它使外部或内部的http请求,在这种情况下,内部将作为主机降级到localhost主机。

axios.get('http://localhost:port/end_point_name/some_route') .then(function (response) { console.log(response); }) .catch(function (error) { console.log(error); });