gpt4 book ai didi

javascript - azure 自定义 API : performing database transaction returns a timeout

转载 作者:行者123 更新时间:2023-11-30 00:14:51 25 4
gpt4 key购买 nike

在 azure 的自定义 API 上,我尝试利用数据库事务对三个表执行批量插入操作。然后我在控制台上遇到此错误。

The request 'POST /api/saveinvite' has timed out. This could be caused by a script that fails to write to the response, or otherwise fails to return from an asynchronous call in a timely manner.

exports.post = function (request, response) {

console.log("save invite executed!!");
var jsonfriendcircle = request.body.jsonfriendcircle;
var jsoninviteelist = request.body.jsoninviteelist;
var jsoninviteefriendcirclelist = request.body.jsoninviteefriendcirclelist;
console.log("Circle is :" + jsonfriendcircle);
console.log("Inviteelist is :" + jsoninviteelist);
console.log("Inviteefriendcirclelist is :" + jsoninviteefriendcirclelist);
var parsedjsfrcircle = JSON.parse(jsonfriendcircle);

var mssql = request.service.mssql;
console.log("mssql obj :" + mssql);

mssql.open({
success: function (connection) {
console.log("connection to db success");
console.log("circle id: " + parsedjsfrcircle["id"]);
console.log("circle name :" + parsedjsfrcircle["circle_name"]);

var sqlst1 = 'insert into friendcircle (id,circle_name)values(?,?)';
connection.query(sqlst1, [parsedjsfrcircle["id"], parsedjsfrcircle["circle_name"]], function (err, results) {
if (err) {
console.log("Error:" + err);
connection.rollback();
response.send(statusCodes.Error, { message: '' });
connection.close();
return;
} else {
// connection.commit();
// connection.close();
}

});



}
, error: function (err) {
console.log("Unable to connect to DB :" + err);
response.send(statusCodes.Error, { message: err });
}
});

};

最佳答案

看起来你并没有想做太多事情。插入几百行应该会在超时之前返回。如果数据库表上的移动服务用户存在权限问题,您将遇到超时,并且您的事务和自定义错误处理可能会隐藏该问题。确保您已运行

GRANT SELECT, INSERT, UPDATE ON OBJECT::[dbo].[Invitee_FriendCircle] TO [Created_MobileServicesLogin_User] 
--For whatever name was created when you made the app (not the name you entered when you created the app, but the wacky one that mobile services made)

一些值得尝试的事情:确保您要插入的表已针对您正在执行的插入类型建立了索引。如果它是一个巨大的表并且索引是一个问题,请让移动 api 插入一个小型临时表,然后使用 sp_start_job 运行异步作业以使用临时表更新主表。这样您就不必等待表进行更新。

在数据库中编写包含插入的存储过程并将变量传递给它们,而不是在此处编写 INSERT 查询。如果您确实要传递大量值并且需要快速执行,则在存储过程中还可以执行 BULK INSERT。

修改数据库连接字符串中的 ConnectionTimeout 属性。您可以修改request.service.config.sqlConnectionString。

尝试将其剥离以找出问题所在。删除事务并尝试在没有事务和自定义错误处理程序的情况下一次只在一张表上执行此操作。尝试一下

exports.post = function(request, response) {
var jsonfriendcircle=request.body.jsonfriendcircle;
var jsoninviteelist=request.body.jsoninviteelist;
var jsoninviteefriendcirclelist=request.body.jsoninviteefriendcirclelist;
var mssql=request.service.mssql;

var sqlst1='insert into FriendCircle (id,circle_name)values(?,?)' ;
mssql.query(sqlst1,[jsonfriendcircle.id,jsonfriendcircle.circle_name], {
success: function(results) {
response.send(statusCodes.OK, { message : 'success' });
},
error: function(err) {
console.log("error is: " + err);
}
});
};

一次尝试一个,看看是否有任何失败,如果失败,请检查 Azure 门户上的日志以查看是否是权限问题。

祝你好运!

关于javascript - azure 自定义 API : performing database transaction returns a timeout,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35130450/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com