首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在环回中使用远程方法增加模型中的字段?

在环回中使用远程方法增加模型中的字段?
EN

Stack Overflow用户
提问于 2016-11-22 18:01:29
回答 2查看 1.6K关注 0票数 1

模型中有一个名为计数器的字段,每当我调用自定义远程方法时,如下所示

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Request URL
http://loopback:3000/api/models/increment_counter

Request body 
EMPTY

Response
{
   "counter" : [Value after Increment]
}

目前,我首先必须从DB中获取计数器值,然后将其增量为1,并更新couter值,这涉及到两个查询,是否可以在下面的mysql查询这样的单个NodeAPI调用中完成,我目前正在使用Mysql作为db。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
mysql_query("
    UPDATE model 
    SET counter = counter + 1
    WHERE model_id = '1'
");

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-11-23 01:18:47

考虑到您需要的MySQL语法,您似乎需要一个原子计数器

数据库事务

使用MySQL连接器,您可以使用数据库事务。MySQL连接器支持它。对于原子计数器来说,这有点过分,但它会完成任务的。

下面是一个示例,在自定义远程方法中

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
MyModel.someRemoteMethodForIncrementing = function(callback) {
  // Start the transaction
  MyModel.beginTransaction({
    isolationLevel: MyModel.Transaction.READ_COMMITTED
  }, function(err, tx) {
    // Retrieve the current counter value as part of the transaction
    MyModel.findById(id, {
      transaction: tx
    }, function(err, data) {
      if (err) {
        console.log(err);
        return tx.rollback(function(err) {
          callback(err);
        });
      }

      // Increment the counter as part of the transaction
      var inc = data.counter + 1;

      MyModel.updateAttributes({
        counter: inc
      }, {
        transaction: tx
      }, function(err, newData) {
        if (err) {
          console.log(err);
          return tx.rollback(function(err) {
            callback(err);
          });
        }

        // Commit the transaction to make it happen
        tx.commit(function(err) {
          if (err) return callback(err);
          // Counter should have been incremented
          callback();
        });
      });
    });
  });
};

我还没试过,但应该能用,让我知道

扩展算子

将来,您将能够使用$inc (增量)扩展算子,但到目前为止,它只受MongoDB连接器的支持,而不是MySQL。

仅供参考,以下是语法(仅适用于MongoDB)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
PUT api/Model/:id?filter={"$inc":{"name":propertyToIncrement, "count":incrementAmount}} 

有一个正在进行的按下,我正在尝试登陆以获得MySQL支持,但是在它能够被合并之前,还有一些很多事情要做。

票数 1
EN

Stack Overflow用户

发布于 2016-11-22 23:04:21

是的,您可以在一个回环远程方法调用中完成这个任务。假设您在请求中发送Id

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
yourModel.remoteMethod = function(data, cb){
    yourModel.findById(data.id, function(err, object){
      if(err){
        cb(err, null);
      }
      object.counter += 1;
      object.save(function(saveErr, afterSaveObj){
        cb(saveErr, afterSaveObj.counter);
      })
    });
}

这里cb是一个回调,环回传递给您的remoteMethod。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40754819

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文