使用自定义POST api插入两个表

问题描述 投票:0回答:1

使用loopback远程方法创建自定义api以插入与photoscomedien中的外键相关的2个不同的表,这是id_comedien所以当使用资源管理器进行测试时,我只能在一个表中插入,因为我只有一个回调,其中我只能放置2个查询中的一个。我想知道是否有办法执行两个查询,以便插入同时进入两个表。

这就是我在cm_comediens.js已经做过的事情

'use strict';
  var app = require('../../server/server.js');

  module.exports = function(cm_comediens) {

    cm_comediens.profile = function (idComedien,path,name,id_utilisateur,naissance_date,infos_news_timestamp,timestamp_creation,cb) {

        var ds = app.datasources.mydb;
        var sql = "INSERT INTO cm_comediens (id_comedien,id_utilisateur,naissance_date,infos_news_timestamp,timestamp_creation) VALUES (?,?,?,?,?)";
        var sql2 = "INSERT INTO photoscomedien (id_comedien,path,name) VALUES (?,?,?)";

        ds.connector.execute(sql2, [idComedien,path,name], function (err, cm_comedienss) {
            ds.connector.execute(sql, [idComedien,id_utilisateur,naissance_date,infos_news_timestamp,timestamp_creation], function (err, cm_comedienss) {
            if (err) console.error(err);
            cb(err, cm_comedienss);        
        });
        });
    };

    cm_comediens.remoteMethod(
        'profile',
        {
            http: { verb: 'post' },
            description: 'Post list of comediens',
             accepts:[
             { arg: 'idComedien', type: 'number' },
             { arg: 'id_utilisateur', type: 'number' },  
             { arg: 'infos_news_timestamp', type: 'date' },  
             { arg: 'naissance_date', type: 'date' },  
             { arg: 'timestamp_creation', type: 'date' } , 
             { arg: 'path', type: 'string' },  
             { arg: 'name', type: 'string' } 
            ],
            returns: { arg: 'data', type: ['cm_comediens'], root: true }
        }
    );
};
node.js api model insert loopbackjs
1个回答
0
投票

您正在使用嵌套回调正确排序查询。从第一个查询的完成回调中调用第二个查询,就像它应该的那样。

但是在插入photoscomedien之前,你试图插入cm_comediens。颠倒两个查询的顺序。

在回调中的.execute() ...操作之前检查错误可能是明智之举。如果得到错误值,则应报告该值而不执行下一步操作。

专业提示:了解并使用Promises或async / await。比无限嵌套的回调更好。

© www.soinside.com 2019 - 2024. All rights reserved.