Структура документа:
|-public/
|-js/
|-shop.js
|-views/
|-routes/
|app.jsЯ определил свое sql-соединение в своем app.js
const mysql = require('mysql');
const db = mysql.createConnection({
host: '127.0.0.1',
user: 'root',
password: 'password',
database: 'pfis'
});
db.connect((err) => {
if (err) {
throw err;
}
console.info('Connected to database');
});
global.db = db;Все sql-запросы в app.js работают нормально!
Моя проблема в том, что у меня есть файл shop.js (см. структуру каталогов), в который нужно вставить некоторый sql (хранимую процедуру), как только они нажмут элемент кнопки на моей странице. И я не могу понять, как этого добиться.
пример shop.js (который не работает!):
function purchaseClicked() {
var stoel = prompt("Enter your chairnumber: ");
alert('Someone is on this way with the ATM-machine');
var cartItems = document.getElementsByClassName('cart-items')[0];
while (cartItems.hasChildNodes()) {
var itemTitle = document.getElementsByClassName('cart-item-title')[0].innerHTML;
var itemQuantity = document.getElementsByClassName('cart-quantity-input')[0].value;
db.query("Call test1_insert(" + itemTitle + ", " + itemQuantity + ", " + stoel + ");",
function (error, results, fields) {
if (error) {
alert("Something went wrong, try again!");
}
alert("Looks like all good!");
});
cartItems.removeChild(cartItems.firstChild);
}
updateCartTotal();
}Я попытался добавить тот же код подключения к БД из app.js (см. фрагмент выше) в файл shop.js, но это тоже не нравится.
Кто может мне помочь, как выполнить SQL из «внешнего» файла .js?
Вы не можете запускать запросы MySQL в клиенте. Кроме того, вы никогда не следует предоставлять вашу базу данных пользователям напрямую. Разрешение пользователям выполнять произвольные запросы — это то, как ваша система будет скомпрометирована. Позволив случайным людям исследовать ваш сервер базы данных, вы рискуете быть скомпрометированным. Напишите слой API.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Я использую Sequelize для этого. БД файл такой:
var sequelize = new Sequelize(mysqlDatabase, mysqlUser,mysqlPassword, {
host: mysqlHost,
dialect: 'mysql',
pool: {
max: 1000,
min: 0,
idle: 10000
},
//logging: logger.info
logging: false
});
var db = {};
db.Shop = sequelize.import(__dirname + '/models/Shop.js');
module.exports = db;
После создания файла db вы можете попасть в магазин следующим образом:
const db = require('path/to/sequelize/file');
db.Shop.create(data);
Большое спасибо за это!!
Примечание. Я бы рекомендовал использовать Сиквел вместо необработанного драйвера MySQL. Это дает вам согласованный интерфейс ко многим базам данных, а не только к одной.