Id、node.jsによってREST APIで複数の投稿リクエストを送信するにはどうすればよいですか?

ENV

以下のnode.jsを使用して作成したRESTAPIに次のpostメソッドがあります。現在、このpostメソッドは1つのIDで機能します。つまり、POSTリクエストを送信するIDを1つ指定できます。IDのリストを入力できるように、この投稿リクエストを更新したいと思います。つまり、IDのリストが与えられた場合、IDを繰り返し処理し、IDごとに同じメッセージ本文でPOSTリクエストを送信します。その場合、複数の投稿リクエストを送信することになり、それぞれが成功または失敗する可能性があります。すべての投稿の最後に、「ID:______は成功し、ID:_____は失敗しました」のようなメッセージを返したいと思います。私のポストリクエストの構造を考えると、これを効果的に行う方法について何かアイデアはありますか?

router.post('/', async (req, res, next) => {
    if (isNil(req['api_key'])) {
        next();
    } else {
        try{
            if (isNil(req.body) || isEmpty(req.body)) {
                logInfo({message: 'Request body is empty or null.', data: req.body}, 'API');
                return res.status(400).send({
                    message: 'Request body is empty or null.',
                });
            }
            let payload = {
                topic: process.env.KAFKA_TOPIC,
                messages: [], 
                key: null, 
                timestamp: 
            };

            payload.key = isNil(req.body.Id) ? '': req.body.Id;
            payload.messages = JSON.stringify(req.body);
            let result = await kafkaService.publish(new Array(payload));
            logInfo({message: 'Settings API Result.', data: result, source: scriptName}, 'API')

        } catch(err){
            let err_more = { message: 'Error Caught in POST', data: req.body, source: scriptName};
            logError(err, err_more, 'API');
            newRelic.noticeError(err, err_more);
            return res.status(500).send({
                message: 'Server Error. Can\'t process your request.',
                payload: req.body
            });
        }

        return res.send({
            message: 'Settings sent for processing.',
            payload: req.body
        });
    }
}, async (req, res, next) => {
    logInfo({message: 'Unauthorized access to settings API', data: req.body}, 'API');
    return res.status(401).send({
        message: 'Unauthorized access to settings API.'
    });
});
テリー・レノックス

makeRequest関数を作成してから、POSTエンドポイントに一連のリクエストを投稿することをお勧めします。

次に、各リクエストをループし、結果をクライアントに送り返します。

async function makeRequest(id, messages) {
    try { 
        let payload = {
            topic: process.env.KAFKA_TOPIC,
            messages: [], 
            key: null, 
            timestamp: new Date().toISOString()
        };

        payload.key = isNil(id) ? '': id;
        payload.messages = messages;
       
        let result = await kafkaService.publish(new Array(payload));
        logInfo({ id, message: 'Settings API Result.', data: result, source: scriptName}, 'API')
        return { id, success: true, result };
    } catch(err) {
        logError({id, message: 'Settings API Result.', data: err }, 'API')
        return { id, success: false, result: null, err };
    };
}

router.post('/', async (req, res, next) => {
    req['api_key'] = "Dd";
    if (isNil(req['api_key'])) {
        next();
    } else {
        try {
            if (isNil(req.body) || isEmpty(req.body)) {
                logInfo({message: 'Request body is empty or null.', data: req.body}, 'API');
                return res.status(400).send({
                    message: 'Request body is empty or null.',
                });
            }
            let requests = req.body;
            let results = [];
            for(let request of requests) {
                results.push(await makeRequest(request.id, JSON.stringify(request.messages)));
            }
            const msg = `Ids: ${results.filter(r => r.success).map(r => r.id).join(",")} succeeded and Ids: ${results.filter(r => !r.success).map(r => r.id).join(",")} failed`;
            logInfo(msg, 'API');
            return res.send({
                message: 'Settings sent for processing: ' + msg,
                payload: req.body
            });
        } catch(err){
            let err_more = { message: 'Error Caught in POST', data: req.body, source: scriptName};
            logError(err, err_more, 'API');
            newRelic.noticeError(err, err_more);
            return res.status(500).send({
                message: 'Server Error. Can\'t process your request.',
                payload: req.body
            });
        }
    }
}, async (req, res, next) => {
    logInfo({message: 'Unauthorized access to settings API', data: req.body}, 'API');
    return res.status(401).send({
        message: 'Unauthorized access to settings API.'
    });
});

POST本文は次のようになります(メッセージに何を含めるべきか正確にはわかりません!):

[
    { "id": 1, "messages": ["foo", "bar"] },
    { "id": 2, "messages": ["foo", "bar"] }
]

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

node.jsで複数のRESTAPIリクエストを非同期に実行するにはどうすればよいですか?

分類Dev

すべての(JavaScript)AJAXリクエストを認証するにはどうすればよいですか?(Node.jsに送信)

分類Dev

JS関数から値を返し、それをNode jsの別のJSスクリプトに送信するにはどうすればよいですか?

分類Dev

ページ数がわからない場合に、Node.jsを使用してwhileループでAPIに複数のページ付けされたGETリクエストを作成するにはどうすればよいですか?

分類Dev

Node-postgresで複数のクエリを使用するにはどうすればよいですか?

分類Dev

node-POSTリクエストによって返されたトークンを変数に保存するにはどうすればよいですか

分類Dev

同じクエリで複数のIDを確認するにはどうすればよいですか?

分類Dev

ajaxリクエストからIDを取得してsymfony関数に送信するにはどうすればよいですか?

分類Dev

LaravelAPIリクエストで複数のIDの値を取得するにはどうすればよいですか

分類Dev

SAP UI5で異なる変更セットIDを使用して、単一のバッチで複数のPOSTリクエストを送信するにはどうすればよいですか?

分類Dev

node.jsでデータとベアラ認証を使用してPOSTリクエストを送信するにはどうすればよいですか?

分類Dev

Wordpressの特定の投稿IDにAJAXリクエストを添付するにはどうすればよいですか?

分類Dev

AWS APIGatewayによってリクエストされたバックエンドでCognitoIdentity Idを取得するにはどうすればよいですか?

分類Dev

node.jsリクエストモジュールを使用してファイルを送信するにはどうすればよいですか?

分類Dev

Node jsでFCMを使用して複数のAndroidデバイスにメッセージを送信するにはどうすればよいですか?

分類Dev

node.js + cheerioでxhrリクエストを指定するにはどうすればよいですか?

分類Dev

Node.js Nginxでhttpリクエストを許可するにはどうすればよいですか?

分類Dev

場所のIDを返すようにGooglePlace APIにリクエストするにはどうすればよいですか?

分類Dev

応答を送信した後、Node / Expressで現在のリクエスト処理を終了するにはどうすればよいですか?

分類Dev

node.jsからサーバーに送信されたリクエストを表示するにはどうすればよいですか?

分類Dev

Node.jsを使用して誤ったPOSTリクエストを処理するにはどうすればよいですか?

分類Dev

node.jsを使用して複数のMongodbクエリを1つに組み合わせるにはどうすればよいですか?

分類Dev

aspnetコアIDに複数のIDストアを追加するにはどうすればよいですか?

分類Dev

Node.JSでIPあたりのリクエスト数を制限するにはどうすればよいですか?

分類Dev

Node.jsリクエストタイプを取得するにはどうすればよいですか?

分類Dev

複数のタブをクエリとドキュメントIDで集約するにはどうすればよいですか?

分類Dev

Javascriptで複数のIDを使用してIDまたはループのリストを作成するにはどうすればよいですか?

分類Dev

node.js express:リクエストがAJAXリクエストであるかどうかを知るにはどうすればよいですか?

分類Dev

Node.jsとExpressを使用してPOSTするときにリクエスト本文にアクセスするにはどうすればよいですか?

Related 関連記事

  1. 1

    node.jsで複数のRESTAPIリクエストを非同期に実行するにはどうすればよいですか?

  2. 2

    すべての(JavaScript)AJAXリクエストを認証するにはどうすればよいですか?(Node.jsに送信)

  3. 3

    JS関数から値を返し、それをNode jsの別のJSスクリプトに送信するにはどうすればよいですか?

  4. 4

    ページ数がわからない場合に、Node.jsを使用してwhileループでAPIに複数のページ付けされたGETリクエストを作成するにはどうすればよいですか?

  5. 5

    Node-postgresで複数のクエリを使用するにはどうすればよいですか?

  6. 6

    node-POSTリクエストによって返されたトークンを変数に保存するにはどうすればよいですか

  7. 7

    同じクエリで複数のIDを確認するにはどうすればよいですか?

  8. 8

    ajaxリクエストからIDを取得してsymfony関数に送信するにはどうすればよいですか?

  9. 9

    LaravelAPIリクエストで複数のIDの値を取得するにはどうすればよいですか

  10. 10

    SAP UI5で異なる変更セットIDを使用して、単一のバッチで複数のPOSTリクエストを送信するにはどうすればよいですか?

  11. 11

    node.jsでデータとベアラ認証を使用してPOSTリクエストを送信するにはどうすればよいですか?

  12. 12

    Wordpressの特定の投稿IDにAJAXリクエストを添付するにはどうすればよいですか?

  13. 13

    AWS APIGatewayによってリクエストされたバックエンドでCognitoIdentity Idを取得するにはどうすればよいですか?

  14. 14

    node.jsリクエストモジュールを使用してファイルを送信するにはどうすればよいですか?

  15. 15

    Node jsでFCMを使用して複数のAndroidデバイスにメッセージを送信するにはどうすればよいですか?

  16. 16

    node.js + cheerioでxhrリクエストを指定するにはどうすればよいですか?

  17. 17

    Node.js Nginxでhttpリクエストを許可するにはどうすればよいですか?

  18. 18

    場所のIDを返すようにGooglePlace APIにリクエストするにはどうすればよいですか?

  19. 19

    応答を送信した後、Node / Expressで現在のリクエスト処理を終了するにはどうすればよいですか?

  20. 20

    node.jsからサーバーに送信されたリクエストを表示するにはどうすればよいですか?

  21. 21

    Node.jsを使用して誤ったPOSTリクエストを処理するにはどうすればよいですか?

  22. 22

    node.jsを使用して複数のMongodbクエリを1つに組み合わせるにはどうすればよいですか?

  23. 23

    aspnetコアIDに複数のIDストアを追加するにはどうすればよいですか?

  24. 24

    Node.JSでIPあたりのリクエスト数を制限するにはどうすればよいですか?

  25. 25

    Node.jsリクエストタイプを取得するにはどうすればよいですか?

  26. 26

    複数のタブをクエリとドキュメントIDで集約するにはどうすればよいですか?

  27. 27

    Javascriptで複数のIDを使用してIDまたはループのリストを作成するにはどうすればよいですか?

  28. 28

    node.js express:リクエストがAJAXリクエストであるかどうかを知るにはどうすればよいですか?

  29. 29

    Node.jsとExpressを使用してPOSTするときにリクエスト本文にアクセスするにはどうすればよいですか?

ホットタグ

アーカイブ