Javascript 在Azure函数中从Azure SQL数据库获取数据
我从AZURE SQL数据库获取数据时遇到问题。我的代码确实获得了数据,但不是全部。其目的是该函数需要接收年龄为X(f.ex.:20)的所有用户,并返回一个包含这些用户的数组。现在代码只返回它在数据库中找到的第一个用户。我使用Azure函数来测试结果。 以下是从数据库获取数据的函数:Javascript 在Azure函数中从Azure SQL数据库获取数据,javascript,azure,azure-functions,azure-sql-database,Javascript,Azure,Azure Functions,Azure Sql Database,我从AZURE SQL数据库获取数据时遇到问题。我的代码确实获得了数据,但不是全部。其目的是该函数需要接收年龄为X(f.ex.:20)的所有用户,并返回一个包含这些用户的数组。现在代码只返回它在数据库中找到的第一个用户。我使用Azure函数来测试结果。 以下是从数据库获取数据的函数: function testfunc(age){ return new Promise ((resolve, reject) =>{ let result = []; c
function testfunc(age){
return new Promise ((resolve, reject) =>{
let result = [];
const sql = 'SELECT * FROM [datingschema].[user] where age = @age'
const request = new Request(sql, function(err){
if (err){
console.log("beforeerr");
console.log(err) //ingen err - så det godt nok!
console.log("aftererr");
reject(err);
}
})
request.addParameter('age', TYPES.Int, age)
request.on('row', (columns) => {
columns.forEach(column =>{
result.push(column.value)
})
resolve(result)
});
connection.execSql(request)
})
}
下面是我在Azure函数中调用函数的部分代码。应该没有错误,因为当我只需要获得一个用户时,它可以正常工作:
const db = require('../database/db');
module.exports = async function (context, req) {
context.log('JavaScript HTTP trigger function processed a request.')
try {
await db.startDb(); //start db connection
} catch (error) {
console.log("Error connecting to the database", error.message)
}
switch (req.method) {
case 'GET':
await get(context, req);
break;
case 'POST':
await post(context, req);
break
default:
context.res = {
body: "Please get or post"
};
break
}
}
async function get(context, req){
try{
let id = req.query.age
let user = await db.testfunc(id)
context.res = {
body: user
};
} catch(error){
context.res = {
status: 400,
body: `No User - ${error.message}`
}
}
}
发生错误的原因是,您在阅读第一行之后解析了您的承诺。考虑以下事项:
function testfunc(age){
return new Promise ((resolve, reject) =>{
let result = [];
const sql = 'SELECT * FROM [datingschema].[user] where age = @age'
const request = new Request(sql, function(err){
if (err){
console.log("beforeerr");
console.log(err) //ingen err - så det godt nok!
console.log("aftererr");
reject(err);
}
})
request.addParameter('age', TYPES.Int, age)
// This is executed multiple times, once for each row
request.on('row', (columns) => {
let row = []
// Accumulate the columns to a row
columns.forEach(column =>{
row.push(column.value)
})
// Don't resolve here. Instead append to result..
// resolve(result)
result.push(row)
});
// This is executed once, when the query has completed
request.on('done', () => {
// .. and resolve here
resolve(result)
})
connection.execSql(request)
})
}
忘了说问题应该与“request.on”部分中的“testfunc”函数有关。我只是不知道如何修复它。你能检查一下你的数据库是否有一些同龄的用户吗?Jim Xu,是的。至少3或4个。我还尝试使用其他价值观,如“性别”。SQL查询在DB控制台中工作,因此问题不应该出现在那里!!非常感谢你的帮助!