使用自定义 POST api 插入到两个表中
insert into two tables using a custom POST api
使用环回远程方法创建自定义 api 以插入与位于 photoscomedien
的外键相关的 2 个不同的 tables,即 id_comedien
所以当使用资源管理器进行测试我只能插入一个 table 因为我只有一个回调,我只能在其中放置 2 个查询之一。我想知道是否有一种方法可以同时执行两个查询,以便插入同时转到两个 table。
这是我在 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 }
}
);
};
您正在使用嵌套回调正确排序查询。第二个查询是从第一个查询的完成回调中调用的,这是应该的。
但是您试图在插入 cm_comediens
之前先插入 photoscomedien
。颠倒你的两个查询的顺序。
在回调中您的.execute() ...
操作之前检查错误可能是明智的。如果得到err值,应该报错,不要进行下一步操作。
专业提示:了解并使用 Promises 或 async/await。比无限嵌套的回调更好。
使用环回远程方法创建自定义 api 以插入与位于 photoscomedien
的外键相关的 2 个不同的 tables,即 id_comedien
所以当使用资源管理器进行测试我只能插入一个 table 因为我只有一个回调,我只能在其中放置 2 个查询之一。我想知道是否有一种方法可以同时执行两个查询,以便插入同时转到两个 table。
这是我在 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 }
}
);
};
您正在使用嵌套回调正确排序查询。第二个查询是从第一个查询的完成回调中调用的,这是应该的。
但是您试图在插入 cm_comediens
之前先插入 photoscomedien
。颠倒你的两个查询的顺序。
在回调中您的.execute() ...
操作之前检查错误可能是明智的。如果得到err值,应该报错,不要进行下一步操作。
专业提示:了解并使用 Promises 或 async/await。比无限嵌套的回调更好。