【问题标题】:Azure Mobile Apps CRUD Operations syntaxAzure 移动应用程序 CRUD 操作语法
【发布时间】:2016-10-11 10:24:31
【问题描述】:

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

提前感谢您的帮助。

【问题讨论】:

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


    【解决方案1】:

    一般来说,您可以利用use() 自定义您自己的中间件来处理额外的操作。

    由于插入操作是通过 HTTP POST 请求实现的。您可以参考Azure Mobile Apps - An item to insert was not provided,了解如何针对 Azure 移动应用使用 POSTMAN 中的数据实现发布请求。

    然后,您可以在 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 中的以下代码 sn-p:

    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();
    });
    

    【讨论】:

      【解决方案2】:

      我在这里完成了关于新 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。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-04-30
        • 2018-02-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多