Azure移动应用程序CRUD操作语法

时间:2016-10-10 15:00:00

标签: node.js azure azure-mobile-services

这是我第一次使用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。如果您能通过提供准确的转换来帮助我,那将是我的首选答案。

提前感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

我已经在这里完成了关于新Node.js SDK的完整系列:https://shellmonger.com/30-days-of-azure-mobile-apps-the-table-of-contents/

还有官方文档,相当全面:https://azure.microsoft.com/en-us/documentation/articles/app-service-mobile-node-backend-how-to-use-server-sdk/

还有一个兼容性软件包,旨在通过将旧服务转换为新格式来简化: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();
});