Я пытаюсь подключиться к серверу SQL, размещенному на AWS. Когда я повторно внедряю приложение без сервера или запускаю функциональный тест в лямбда-консоли, все работает отлично (все функции возвращают ожидаемые результаты). Однако, когда я вызываю эту функцию с веб-сайта, она работает только в первый раз. Каждый звонок после этого возвращает 403 запрещенных. Я развертываю код, используя serverless deploy
. Я попытался:
- переписать мой метод с помощью try-catch
- повторное развертывание функции (работает только в первый раз)
- закомментировал весь код другой функции (такничто другое не может выдать ошибку)
- жестко запрограммировал передачу в мою функцию авторизации (поэтому любой запрос работает)
- подтвердил, что токен отправлялся с каждым запросом от angular
- Подтвержденоимя пользователя и пароль были правильными в SQL (при запуске в лямбда-тесте)
- пошагово прошел по коду и разместил операторы return в разных точках - не имеет значения, откуда я возвращаюсь (даже первая строка метода)эта проблема
Ничто не может исправить это. Любые идеи о том, что я должен попробовать дальше?
Глобальные переменные
'use strict';
const AWS = require('aws-sdk');
const S3 = new AWS.S3();
const sql = require("mssql");
const ftp = require("basic-ftp")
//const fs = require("fs")
var version = '1.1.2'
var config = {
user: 'ssssss',
password: 'xxxxx',
server: 'XXXX.rds.amazonaws.com',
database: 'SA'
};
module.exports.rdsquery = async (event) => {
//return { statusCode: 200, headers: { 'Access-Control-Allow-Origin': '*' }, body: JSON.stringify('rdsquery check') };
try {
let db;
let tablequery;
//return { statusCode: 200, headers: { 'Access-Control-Allow-Origin': '*' }, body: JSON.stringify('rdsquery check2') };
try {
console.log('--called rdsquery ' + version)// with body: '+JSON.stringify(event))
//event = JSON.parse(event).body
console.log('parsing params')
db = 'SA'//event.db
tablequery = 'select top(1) * from SA..Customer'//event.table
//return { statusCode: 500, headers: { 'Access-Control-Allow-Origin': '*' }, body: JSON.stringify('db: ' + db + ' query: ' + tablequery) };
if (!db || !tablequery)
return { statusCode: 500, headers: { 'Access-Control-Allow-Origin': '*' }, body: JSON.stringify('cant parse event') };
//console.log('aws db: ' + db + ' query: ' + tablequery.substring(0, 50) + '...')
}
catch (e) {
return { statusCode: 500, headers: { 'Access-Control-Allow-Origin': '*' }, body: JSON.stringify('rdsquery top half err: ' + e) };
}
//return { statusCode: 500, headers: { 'Access-Control-Allow-Origin': '*' }, body: JSON.stringify('db: ' + db + ' query: ' + tablequery) };
try {
if (db != 'SA')
throw ('DB mismatch. no config found')
console.log('about to connect to sql pool')
let pool=null;
try{await sql.close();}catch{}
if(!pool)
pool = await sql.connect(config);
//connection pool error handling
pool.on( "error", async err => {
console.log( [ "error", "data" ], "connection pool error" );
console.log( [ "error", "data" ], err );
try{await pool.close();}catch{pool=null;}
return { statusCode: 500, headers: { 'Access-Control-Allow-Origin': '*' }, body: JSON.stringify('conn pool failed') };
}
);
//return { statusCode: 200, headers: { 'Access-Control-Allow-Origin': '*' }, body: JSON.stringify('conn to pool') };
console.log('sending query')
const result = await pool.request().query(tablequery);
//console.log('result: '+JSON.stringify(result.recordset))
pool.close();
console.log('pool closed')
return { statusCode: 200, headers: { 'Access-Control-Allow-Origin': '*' }, body: JSON.stringify(result.recordset) };
}
catch (e) {
console.log('rdsquery-catch bott: ' + e)
return { statusCode: 200, headers: { 'Access-Control-Allow-Origin': '*' }, body: JSON.stringify('rdsquery error bottom half: ' + e) };
}
}
catch (e) {
return { statusCode: 200, headers: { 'Access-Control-Allow-Origin': '*' }, body: JSON.stringify('rdsquery error global: ' + e) };
}
};