Я создаю API в Azure функциях, используя TypeScript, с несколькими конечными точками, подключенными к одному и тому же Azure SQL серверу. Каждая конечная точка была настроена с использованием расширения Azure Functions для VS Code с шаблоном HttpTrigger TypeScript. Каждая конечная точка в конечном итоге будет выполнять разные вызовы базы данных, собирая, обрабатывая и сохраняя данные в разных таблицах.
Кажется, нет привязок по умолчанию для Azure SQL (только Storage или Cosmos ), и хотя утомительный используется в некоторых Microsoft документации , он, как правило, не охватывает Azure Функции, которые кажутся работает асинхронно. Более того, другие похожие вопросы StackOverflow, как правило, относятся к стандартному JavaScript и используют синтаксис module.exports = async function (context)
, а не const httpTrigger: AzureFunction = async function (context: Context, req: HttpRequest): Promise<void>
синтаксис, используемый шаблонами TypeScript HttpTrigger.
Вот что у меня получилось далеко в одной из этих конечных точек, с образцом кода из утомительной документации по умолчанию Azure Функции HttpTrigger:
var Connection = require('tedious').Connection;
var config = {
server: process.env.AZURE_DB_SERVER,
options: {},
authentication: {
type: "default",
options: {
userName: process.env.AZURE_DB_USER,
password: process.env.AZURE_DB_PASSWORD,
}
}
};
import { AzureFunction, Context, HttpRequest } from "@azure/functions"
const httpTrigger: AzureFunction = async function (context: Context, req: HttpRequest): Promise<void> {
context.log('HTTP trigger function processed a request.');
const name = (req.query.name || (req.body && req.body.name));
if (name) {
var connection = new Connection(config);
connection.on('connect', function(err) {
if(err) {
console.log('Error: ', err)
}
context.log('Connected to database');
});
context.res = {
// status: 200, /* Defaults to 200 */
body: "Hello " + (req.query.name || req.body.name)
};
}
else {
context.res = {
status: 400,
body: "Please pass a name on the query string or in the request body"
};
}
};
export default httpTrigger;
Это заканчивается следующим сообщением:
Предупреждение : Неожиданный вызов 'log' в объекте контекста после завершения выполнения функции. Пожалуйста, проверьте асинхронные вызовы, которые не ожидаются, или вызовы 'done', сделанные до завершения выполнения функции. Имя функции: HttpTrigger1. Идентификатор вызова: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx. Подробнее: https://go.microsoft.com/fwlink/?linkid=2097909
Опять же, документация asyn c, связанная с описанием только стандартного синтаксиса JavaScript module.exports = async function (context)
, а не синтаксиса, используемого этими TypeScript httpTriggers.
Я также читал, что лучше всего иметь одно соединение, а не подключаться заново каждый раз при вызове этих конечных точек - но опять же не уверен, следует ли это делать в отдельной функции, которая звонят все конечные точки. Любая помощь будет принята с благодарностью!