在Azure移动服务自定义API中使用事务
Using transactions in Azure mobile service custom API
我使用azure移动服务与javascript后端来执行自定义API。
我需要执行几个独立的sql语句(删除,更新)。我需要一个事务来确保我只在所有sql语句都成功时才提交。
我发现很难找到很多关于这方面的文档。
我从这里http://msdn.microsoft.com/en-us/library/jj554212.aspx开始,并按照指示调用connection.beginTransaction()
mssql.open({
success: function(connection) {
connection.beginTransaction();
...
我不知道我该如何从那里开始。如果我然后尝试使用连接对象执行普通的delete sql语句,我会得到以下错误:
connection.query(deleteStatement, [parameter1, ], {
success: function(results)
{
connection.commit();
response.send(statusCodes.OK, { message : '' });
},
error: function(err) {
connection.rollback();
console.log("error: " + err);
response.send(statusCodes.Error, {message : err});
}
});
错误:[msnodesql]传递给函数查询或的参数无效queryRaw .
另一方面,如果我在原始mssql对象上执行相同的查询(使用相同的语法),那么connection.commit()和connection.rollback()语句似乎什么也不做。查询工作,项目被删除…但是,即使我在最后一步调用connection.rollback(),它们也会被删除。
我想我应该拨打转接电话。查询和传入事务…在某种程度上。我找不到任何关于这个的文档。
如何在Azure移动服务中正确实现事务-自定义API (javascript后端)?谢谢!
我让它工作了。事实证明,它的语法与预期的有很大不同。我找不到任何关于这方面的文档,看起来我们在交易方面几乎是靠自己的。
这就是我最后使用的:
var mssql = request.service.mssql;
mssql.open({
success: function(connection) {
connection.beginTransaction( function (error)
{
var statement1 = 'delete ... where X = ?'
connection.query(statement1, [parameter1, ], function(err, results)
{
if (!isBlank(err))
{
console.log("Error:" + err);
connection.rollback();
response.send(statusCodes.Error, {message : ''});
connection.close();
return;
}
var statement2 = 'delete ... where X = ?'
connection.query(statement2, [parameter2, ], function(err, results)
{
if (!isBlank(err))
{
console.log("Error:" + err);
connection.rollback();
response.send(statusCodes.Error, {message : ''});
connection.close();
return;
}
else
{
//daisy chain more statements if necessary. When the last one succeeds:
connection.commit();
response.send(statusCodes.OK, { message : '' });
connection.close();
}
}
});
}
},
error: function(err) {
console.log("Error : " + err);
response.send(statusCodes.Error, {message : err});
}
});
我发现这个语法很麻烦,但它可以工作。任何关于此模式的改进或建议都是非常欢迎的!
Open函数返回node-sqlserver.open的对象;只是用你的连接串接通了。我们正在更新这个文档。您可以查看node-sqlserver的github项目并查看单元测试:https://github.com/Azure/node-sqlserver
正在积极地获取文档修复此问题-抱歉给您带来麻烦。
- 如何更改bigquery API中的计费层选项
- Amazon S3 REST API大小不正确
- 客户端服务器REST API captcha实现
- 使用Facebook live API创建实时视频对象时的隐私设置
- 谷歌放置API:按国家或餐馆名称搜索餐馆
- MeteorJS:在带有回调的vzaar api上正确使用wrapAsync
- 是否可以控制获取哪些Google地图脚本(JavaScript API)
- API密钥使用和检查示例
- 谷歌地图API v3不适用于移动浏览器或PhoneGap
- 任何方式使AJAX调用Gmail API,而无需通过JS库
- 谷歌地图JS API+JSON-多个标记没有显示
- 单击超链接时,如何使用Google Maps API v3缩放地图
- 如何在 API 调用后和 if 语句中启用提交按钮
- 与运行长作业(javascript,node.js)的第三方API同步的最佳实践
- 搜索api在mac上显示对话框
- Backbone.js restful json API design
- 标记的实时更新,无需加载页面谷歌地图API V3
- 如何在带有JQuery的Neo4j 2.2.x中使用事务Cypher HTTP端点和新的REST API身份验证和授权
- Azure 自定义 API:执行数据库事务返回超时
- 在Azure移动服务自定义API中使用事务