Lambda Local и HTTP Call - PullRequest
       1

Lambda Local и HTTP Call

0 голосов
/ 06 ноября 2018

У меня есть функция в node.js , которая должна быть размещена как лямбда в AWS . Но прежде чем разместить его, нам нужно проверить, правильно ли работает эта функция. Я пытался запустить функцию, используя lambda-local . Но проблема в том, что в моей логике есть внешние HTTP-вызовы. Я использую Axios для этого, но я получаю ответ как undefined . Есть ли способ поразить эти внешние конечные точки HTTP и получить ответ? Ниже приведен журнал командной строки. Заранее спасибо.

D:\Billing_&_Consumption\P2D-Phase2 - Billings\POC\scripts\controller>lambda-local -l DocumentsHandler.js -h getDocumentsList -e event.js
warning Using both auth systems: aws_access_key/id and secret_access_token !
info: START RequestId: 155ee184-1a7b-464a-eeac-d5593bde5abe

Response: undefined
TypeError: Cannot read property 'access_token' of undefined
    at Object.DocumentsController.getDocumentsList (D:\Billing_&_Consumption\P2D-Phase2 - Billings\POC\scripts\controller\DocumentsController.js:26:87)
    at Object._executeSync (C:\Users\429732\AppData\Roaming\npm\node_modules\lambda-local\lib\lambdalocal.js:169:47)
    at Object._execute [as execute] (C:\Users\429732\AppData\Roaming\npm\node_modules\lambda-local\lib\lambdalocal.js:40:22)
    at C:\Users\429732\AppData\Roaming\npm\node_modules\lambda-local\bin\lambda-local:133:21
    at Object.<anonymous> (C:\Users\429732\AppData\Roaming\npm\node_modules\lambda-local\bin\lambda-local:169:3)
    at Module._compile (module.js:652:30)
    at Object.Module._extensions..js (module.js:663:10)
    at Module.load (module.js:565:32)
    at tryModuleLoad (module.js:505:12)
    at Function.Module._load (module.js:497:3)
error: End - Error
error: ------
error: {
        "errorMessage": "Cannot read property 'access_token' of undefined",
        "errorType": "TypeError",
        "stackTrace": [
                "Object.DocumentsController.getDocumentsList (D:\\Billing_&_Consumption\\P2D-Phase2 - Billings\\POC\\scripts\\controller\\DocumentsController.js:26:87)",
                "Object._executeSync (C:\\Users\\429732\\AppData\\Roaming\\npm\\node_modules\\lambda-local\\lib\\lambdalocal.js:169:47)",
                "Object._execute [as execute] (C:\\Users\\429732\\AppData\\Roaming\\npm\\node_modules\\lambda-local\\lib\\lambdalocal.js:40:22)",
                "C:\\Users\\429732\\AppData\\Roaming\\npm\\node_modules\\lambda-local\\bin\\lambda-local:133:21",
                "Object.<anonymous> (C:\\Users\\429732\\AppData\\Roaming\\npm\\node_modules\\lambda-local\\bin\\lambda-local:169:3)",
                "Module._compile (module.js:652:30)",
                "Object.Module._extensions..js (module.js:663:10)",
                "Module.load (module.js:565:32)",
                "tryModuleLoad (module.js:505:12)",
                "Function.Module._load (module.js:497:3)"
        ]
}
error: ------
error: Lambda failed in 135ms.

Я могу предоставить вам вызов axios, его разрешение и отклонение

public getAccessToken(): AxiosPromise<any> {
    return axios({
        method: 'post',
        url: `${URL}`,
        data: this.data,
        headers: {
            'Content-Type': 'application/x-www-form-urlencoded'
        }
    });
}

Service.ts

this.documentStoreBroker.getAccessToken()
    .then((token: any) => {
        console.log(token);
        return new ADSAccessToken(token);
    })
    .catch(error => {
        console.log(error);
        throw new InternalServerError('99x100');
    });
}

1 Ответ

0 голосов
/ 07 ноября 2018

Сначала вы должны попытаться достичь конечной точки для токена через Почтальон . Вы можете проверить правильность настроек конечной точки, а затем использовать их для axios.

Если это сработает, вы можете продолжить в своей лямбде и использовать Nock , чтобы высмеивать ожидаемый вами ответ (например, ответ, который вы получили в почтальоне). Nock перехватывает вызовы http, так что вы больше не достигнете реальной конечной точки и можете сосредоточиться на остальной логике.

Однако код nocked не должен превращаться в рабочий, потому что он предотвращает попадание в реальную конечную точку, поэтому я бы предложил использовать какую-то среду тестирования для написания тестов, которые не влияют на рабочий код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...