Bonjour, J'ai commencé mon API et je suis bloqué sur le fait de pouvoir insérez plusieurs données dans plusieurs tables differentes dans une seule requête, en mysql c'est possible du coup j'ai besoin d'aide pour pouvoir avancé .
var http = require("http");
var express = require('express');
var app = express();
var mysql = require('mysql');
var bodyParser = require('body-parser');
var PHPUnserialize = require('php-unserialize');
const Serialize = require('php-serialize');
var connection = mysql.createConnection({
host : 'localhost',
user : 'root',
password : 'root',
database : 'restapi',
port : '8889'
});
connection.connect(function(error) {
if (error) throw error
console.log('\nCongrats MySQL Server success connect')
})
app.use(bodyParser.json()); // to support JSON-encoded bodies
app.use(bodyParser.urlencoded({ // to support URL-encoded bodies
extended: true
}));
var server = app.listen(4000, "127.0.0.1", function () {
var host = server.address().address
var port = server.address().port
console.log("Server listening at http://%s:%s", host, port)
});
//GET Domains
app.get('/api/domains.json', function (req, res) {
connection.query('select id, name, created_at from domain', function (error, results, fields) {
if (error) throw error;
var domain = results[0];
if (domain == undefined) {
res.status(404);
res.send({
code: 404,
message: "Not found"
});
} else {
res.send({
code: 200,
message: 'success',
datas: results
});
}
});
});
//Get Domain By ID
app.get('/api/domain/:id.json', function(req, res) {
var domain_id = req.params.id;
var sql1 = 'SELECT * FROM domain WHERE id = "' + domain_id + '"';
connection.query(sql1, function(error, data) {
if (error) throw error;
var domain = data[0];
if (domain == undefined) {
res.status(404);
return res.send({
code: 404,
message: "Not found"
});
}
connection.query('SELECT us.username, us.id FROM user AS us WHERE us.id ="' + domain.user_id + '"', function(error, data1) {
if (error) throw error;
domain["user_id"] = domain["user"];
domain["creator"] = data1[0];
connection.query('SELECT * FROM lang', function(error, result) {
domain["lang"] = result;
res.send({
code: 200,
message: 'success',
datas: domain
});
});
});
});
});
// POST Step 4
app.post('/api/domain/:id/translation.json', function(req, res) {
var domain_id = req.params.id;
var insertQuery = mysql.format("INSERT INTO translation (`key`, `domain_id`) VALUES (?,?);", [req.body.key, domain_id]);
var insertQuery2 = mysql.format("INSERT INTO translation_to_lang (`lang_id`, `value`) VALUES (?,?);", [req.body.lang_id, req.body.value]);
connection.query(insertQuery, function(error, result) {
if (error) {
return res.status(400).send({
code: 400,
message: 'Bad Request'
});
}
connection.query(insertQuery, function(error, result) {
if (error) {
return res.status(400).send({
code: 400,
message: 'Bad Request'
});
}
});
console.log(result);
var selectQuery = mysql.format("SELECT * FROM translation WHERE id = ?;", result.insertId);
connection.query(selectQuery, function(error, data_insert) {
setTimeout(function () {
res.send({
code: 201,
message: 'success',
datas: data_insert
});
}, 1000);
});
});})
app.all('/*', function(req, res, next) {
// CORS headers
res.header("Access-Control-Allow-Origin", "*"); // restrict it to the required domain
res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');
// Set custom headers for CORS
res.header('Access-Control-Allow-Headers', 'Content-type,Accept,X-Access-Token,X-Key');
if (req.method == 'OPTIONS') {
res.status(200).end();
} else {
res.status(404);
res.send({
code: 404,
message: "Not found"
});
}
});
Au niveau de la requête post je viens de la modifié afin d'être plus compréhensible, les 2 requêtes INSERT INTO je voudrai simplement en fire une seule mais qui contient les 2. ça m'aiderai vachement après si y'au d'autres solution à ce problème je suis preneur
Le vrai courage n'est pas de savoir quand supprimer une vie, mais quand en épargner une.
Il semble que le support des requêtes multiples soit désactivé par défaut avec cette bibliothèque pour des raisons de sécurité. Il faut l'autoriser explicitement comme indiqué dans la documentation.
var connection = mysql.createConnection({ multipleStatements: true })
- Edité par Yovar 16 janvier 2018 à 20:01:46
NODEJS Api
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.