首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在NodeJS / ExpressJS中向自己发出HTTP请求

在NodeJS / ExpressJS中向自己发出HTTP请求
EN

Stack Overflow用户
提问于 2013-08-30 00:30:54
回答 4查看 12.5K关注 0票数 24

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

代码语言:javascript
复制
var url = "http://127.0.0.1:" + (process.env.PORT || 3000) + path;
request(url, function(error, response, body){ 
  ...
});

有没有一种方法可以通过NodeJS管道处理请求,而不实际执行HTTP请求?

或者,有没有更好的方法来形成URL?对于生产站点来说,127.0.0.1不是处理这个问题的最健壮的方法,这让我很紧张。

EN

回答 4

Stack Overflow用户

发布于 2016-03-29 10:09:33

自消耗JSON API

在一个自使用的JSON API中,您在一些独立的控制器函数中定义了一些功能,然后将这些功能连接起来以便事后表达。让我们以一个库应用程序为例:

books.js

代码语言:javascript
复制
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
  }
}

to-http.js

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

代码语言:javascript
复制
module.exports = function toHTTP (func) {
    return function (req, res) {
         func(req.params).then(function (data) {
             res.send(data)
         })
    }
}

router.js

然后我们将控制器连接到http路由器。

代码语言:javascript
复制
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应用程序。奇妙的是,我们也可以手动调用这些控制器函数。

代码语言:javascript
复制
var books = require('./books')
books.processLateFees().then(function () {
    // late fees have been processed
})

如果你需要一个更深入的例子,Ghost blog的代码库是关于this patternbuilt。这是一本内容非常丰富的读物。

票数 12
EN

Stack Overflow用户

发布于 2016-03-17 11:09:11

如果你只有一个nodejs应用程序,你可以把这个方法放在你的Model或Controller中,然后在应用程序中调用它,它需要的资源比创建一个新请求要少。

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

票数 0
EN

Stack Overflow用户

发布于 2014-02-02 18:24:30

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

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18516339

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档