Javascript 在NodeJS/ExpressJS中向Self发出HTTP请求

Javascript 在NodeJS/ExpressJS中向Self发出HTTP请求,javascript,node.js,express,Javascript,Node.js,Express,我正在构建一个NPM模块,它需要向自身(正在运行的web服务器)发出HTTP请求。例如: var url = "http://127.0.0.1:" + (process.env.PORT || 3000) + path; request(url, function(error, response, body){ ... }); 有没有一种方法可以在不执行HTTP请求的情况下通过NodeJS管道处理请求 还是有更好的方法来形成URL?我感到紧张的是,127.0.0.1并不是生产现场处理此

我正在构建一个NPM模块,它需要向自身(正在运行的web服务器)发出HTTP请求。例如:

var url = "http://127.0.0.1:" + (process.env.PORT || 3000) + path;
request(url, function(error, response, body){ 
  ...
});
有没有一种方法可以在不执行HTTP请求的情况下通过NodeJS管道处理请求


还是有更好的方法来形成URL?我感到紧张的是,
127.0.0.1
并不是生产现场处理此问题的最可靠的方法。

我在我的一个项目中这样做,效果很好。
到目前为止,我在dev和prod中使用它没有任何问题,因为我使用了几个nodejs应用程序和3个不同的web服务,它们调用自己来登录或检查身份验证。我同时使用express.js和sails.js(基于express.js)

我认为使用请求模块是可以接受的,它相当快,我在进行单元测试时使用这种方法

如果你只有一个nodejs应用程序,你可以将该方法放在模型或控制器中,并在应用程序中调用它,与创建新请求相比,它需要的资源更少

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

自用JSON API 在一个自我消费的JSON API中,您可以在一些独立的控制器函数中定义一些功能,然后将这些功能连接到ExpressAfter。让我们以库应用程序为例:

books.js to-http.js 在这个文件中,我们构建了一个将控制器函数转换为HTTP路由的函数。我们获取查询参数并将其作为选项传递给控制器:

module.exports = function toHTTP (func) {
    return function (req, res) {
         func(req.params).then(function (data) {
             res.send(data)
         })
    }
}
路由器.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))
因此,我们现在有一个连接到控制器功能的express应用程序。奇妙的是,我们也可以手动调用这些控制器函数

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

如果你需要一个更深入的例子,Ghost博客代码库就在附近。这是一本内容丰富的书。

您有Express实例吗?如果是,我相信您可以简单地触发
请求
事件。@gustavohenke是的,我可以要求访问-您能举一个简单的例子吗?不发送请求就无法测试请求。节点的http.request或来自mikeal的请求库足以发送请求。这就是在服务器上运行测试的方式。这也是在服务器本身上运行的,因此
127.0.0.1
应该可以正常工作。我建议将该API的逻辑放在逻辑或模型方法中,然后通过传递参数来调用它,而不是自调用。如果您的目的是在响应中获取HTML,那么只需继续执行您正在执行的操作:普通http请求
var books = require('./books')
books.processLateFees().then(function () {
    // late fees have been processed
})