2013-08-29 9 views
19

自分自身(実行中のWebサーバー)に対してHTTP要求を行う必要があるNPMモジュールを構築しています。例:NodeJS/ExpressJSで自己への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が生産現場でこれを処理する最も堅牢な方法ではないと緊張しています。

+0

あなたはExpressインスタンスを持っていますか?はいの場合、単に 'request'イベントを引き起こすことができると思います。 – gustavohenke

+0

@gustavohenkeええ、私はアクセスが必要な場合があります - あなたは簡単な例を置くことができますか? – bendytree

+0

リクエストを送信せずにテストすることはできません。 mikealのノードのhttp.requestまたはリクエストライブラリはリクエストを送信するのに十分です。これがサーバー上でテストを実行する方法です。また、これはサーバ上で動作するので、 '127.0.0.1'はうまく動作するはずです。 – user568109

答えて

0

私は自分のプロジェクトでそれを行い、うまくいきます。 私はこれをdevとprodで使用しています。なぜなら、私は3つの異なるWebサービスを持つ複数のnodejsアプリケーションを使用してログインするか、auhtenticationをチェックするからです。私はそれが非常に高速であると私はユニットがあなたが置くことができ

0

(express.jsに基づく)express.jsとsails.jsの両方を使用しますそのメソッドをモデルやコントローラ内に配置し、アプリケーション内に呼び出す場合は、nodejsアプリケーションが1つだけの場合は、新しい要求を作成するよりもリソースが少なくて済みます。

複数のnodejsアプリケーション(または他のサービス)がある場合は、特定のURLとポートを持つ他のWebサービスへの要求を作成するのが普通です。

1

をテスト実行するとき、私はこのアプローチを使用し、私は要求モジュールを使用することは許容できると思い

6

JSON APIを消費する自己でJSONのAPI

を消費する自己、あなたには、いくつかのスタンドアロンコントローラの機能に一部の機能を定義し、事後に表現するための機能性をアップ配線します。のは、一例として、ライブラリアプリケーションを使用してみましょう:

books.jsに-http.js我々はHTTPルートにコントローラ機能を変換する関数を構築し、このファイルに

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 
    } 
} 

。私たちは、クエリのparamsを取り、オプションとして、当社のコントローラにそれを渡す:

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

router.js

そして、我々は、だから我々が今持っている

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)) 

当社のhttpルータに私たちのコントローラを接続しますコントローラ機能に接続された高速アプリケーション。素晴らしいことは、これらのコントローラ機能を手動で呼び出すこともできることです。あなたは、この深例ではより多くを必要とする場合

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

Ghost blog codebaseは現在、この模様を中心に構築されています。それは非常に有益な読書です。

0

あなたはブラウザ用のPromiseベースのHTTPクライアントであるAxiosと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); });

関連する問題