这是我第一次使用SO。我来到这里是因为我最近迁移到了新的Microsoft Azure应用服务,看起来node.js语法等已经改变或者有点不同。这是我当前使用旧移动服务的代码,我希望迁移到新语法。关于什么是变化等方面的参考非常有限,我在谷歌上也找不到多少。
function insert(item, user, request) {
var table = tables.getTable('user');
table.where({
userid: item.userid
}).read({
success: upsertItem
});
function upsertItem(existingItems) {
if (existingItems.length > 0) {
item.id = existingItems[0].id;
table.update(item, {
success: function(updatedItem) {
request.respond(200, updatedItem)
}
});
} else {
request.execute();
}
}
}
这是新脚本的示例
var table = module.exports = require('azure-mobile-apps').table();
table.read(function (context) {
return context.execute();
});
我也见过这篇文章,但它没有帮助
Azure mobile apps CRUD operations on SQL table (node.js backend)
我的目标是按照原始代码执行UPSERT。如果您能通过提供准确的转换来帮助我,那将是我的首选答案。
提前感谢您的帮助。
答案 0 :(得分:0)
我已经在这里完成了关于新Node.js SDK的完整系列:https://shellmonger.com/30-days-of-azure-mobile-apps-the-table-of-contents/
还有一个兼容性软件包,旨在通过将旧服务转换为新格式来简化:https://www.npmjs.com/package/azure-mobile-apps-compatibility
在这些之间,您应该能够轻松地将您的网站转换为新的Azure移动应用SDK。
答案 1 :(得分:0)
一般来说,您可以利用use()
自定义自己的中间件来处理其他操作。
由于Insert操作使用HTTP POST请求实现。您可以参考Azure Mobile Apps - An item to insert was not provided了解如何使用POSTMAN中针对Azure移动应用程序的数据实现发布请求。
然后,您可以在Azure移动应用中安装body-parser
模块来解析请求正文。
在app.js
中添加以下代码以启用模块:
var bodyParser = require('body-parser');
app.use(bodyParser.json({ limit: '50mb' }));
app.use(bodyParser.urlencoded({ limit: '50mb', extended: true }));
最后,请考虑Easy Tables Script中有关如何使用中间件的以下代码片段:
var insertMiddleware = function(req,res,next){
var queries = require('azure-mobile-apps/src/query');
var t = req.azureMobile.tables('TodoItem');
var query = queries.create('TodoItem')
.where({ text: req.body.text });
t.read(query).then(function(data){
if(data.length === 0){
next();
}else{
data.text = "something new";
console.log(data);
var query = {
sql: 'UPDATE TodoItem SET text = @text where id = @id',
parameters: [
{ name: 'text', value: data.text },
{ name: 'id', value: data.id }
]
};
req.azureMobile.data.execute(query).then(function(result){
res.status(200).json("success");
});
}
});
};
table.insert.use(insertMiddleware, table.operation);
table.insert(function (context) {
return context.execute();
});