2017-03-08 78 views
0

好吧,這不是你想象的那樣,我不是在尋求異步/等待模式或異步編程方面的幫助,我非常熟悉這些。然而,我正在查詢在Node.JS Express服務中是否有可能。Node.JS和異步消息傳送

場景

我這是在Node.js的開發,使用Express.JS揭露一些REST端點客戶端可以連接併發送POST請求的Web服務。在大多數情況下,這些都是同步的,並且會創建一個SOAP消息並將其發送到外部服務並接收即時響應,然後可以將其返回給客戶端,這些都是已經實現的非常簡單的東西。所以,我聽到你說什麼,我正在談論這一點。

我有幾個POST交互,將建立一個SOAP消息發送到異步外部端點,其中響應將通過入站端點異步接收。

選項1:我在這些情況下尋找的是能夠構建SOAP消息,創建一個偵聽器(這樣我可以偵聽對我的請求的響應),然後將請求發送到外部服務並立即返回一個200

選項2:當我安裝的服務,我想也設置監聽來自同時還偵聽來自內部服務REST請求外部服務傳入的請求。

問題

要麼選擇可能的節點和Express嗎?如果是的話,那麼如何實現呢?

注:我使用WCF或監聽知道它可能在C#中,但我想避免這種情況,並使用Node.js的所以任何幫助將不勝感激。

回答

0

首先檢查node-soap是否符合您的需求。

選擇1:我在這些情況下尋找的是能夠構建SOAP消息,創建一個偵聽器(這樣我可以偵聽對我的請求的響應),然後將請求發送到外部服務立即返回200.

這是一個非常基本的非SOAP服務實現。

let request = require('request-promise'); 
 
let express = require('express'); 
 
let app = express(); 
 

 
//Validate the parameters for the request 
 
function validateRequest(req) { ... } 
 
//Transform the request to match the internal API endpoint 
 
function transformRequest(req) { ... } 
 

 
app.post('/external', function(req, res) { 
 
    if(!validateRequest(req)) 
 
    return res.status(400).json({success: false, error: 'Bad request format'); 
 
    res.status(200).send(); 
 
    
 
    let callbackUrl = req.query.callback; 
 
    let transformedRequest = transformRequest(req); 
 
    let internalServiceUrl = 'https://internal.service.com/internal' 
 
    request.post(internalServiceUrl, {body: transformedRequest}).then(function (internalResponse){ 
 
    //Return some of the internal response? 
 
    return request.get(callbackUrl, {success: true, processed: true}); 
 
    }).catch(function (e) { 
 
    request.get(callbackUrl, {success: false, error: e}); 
 
    }); 
 
});

選項2:當我安裝的服務,我想也設置監聽來自同時還偵聽來自內部服務REST請求外部服務傳入的請求。

有 「聽」 在HTTP沒有。如果您需要實時收聽,請檢查socket.io。它使用websockets。

你的另一個選擇是輪詢內部服務(比方說,如果你要檢查其可用性)。