Попытка вызвать запрос базы данных из другого файла javascript в NodeJS.
Пример файла базы данных:
function addUser(user) {
connection.connect(function (err) {
if (err) {
console.error('Error connecting: ' + err);
}
console.log('Connected as id ' + connection.threadId);
});
var sql = "INSERT INTO 'mobile'.'main' ('userId') VALUES (?);"
var inserts = [user];
connection.query(sql, inserts, function (error, results) {
console.log('query');
if (error) {
return error;
} else {
console.log('Success Query');
return results;
}
});
connection.end(function (err) {
if (err) {
console.error('Error connecting: ' + err);
}
console.log('Connection closed!');
});
}
module.exports = addUser;
Пример файла main.js:
app.get('/api/mysql/:user', function (req, res) {
var user = req.params.user;
addUsers(user)
res.json({
SQLResp: 'Query succes',
result: addUsers.result
});
});
Как получить результат из первого файла и использовать его в качестве ответа в главном js?
Добро пожаловать в переполнение стека.
это отсутствует в вашем файле базы данных. Как у вас там было соединение?
Здесь приведен пример примера " Как экспортировать подключение к базе данных" и использовать его для совершения вызовов из других файлов.
Также читайте о вызовах-функциях, обещаниях, асинхронных ожиданиях и асинхронных функциях JavaScript. Это основы JavaScript, а также доступ к документам NodeJS.
DB.js:
const MYSQL = require('mysql');
const connection = MYSQL.createConnection({
host: 'localhost', // url of db
user: 'root',
password: 'root',
database: 'dbName'
});
module.exports = connection;
Теперь вы будете использовать это соединение из другого файла для вызова базы данных.
app.js:
const db = require('./DB'); // Path of your db connection file. I named it DB.js on same level as of app.js
function addUser(user) {
// Since database calls are async in NodeJS thus using promises.
return new Promise ( (resolve, reject) => {
db.connect(function (err) {
if (err) {
console.error('Error connecting: ' + err);
return reject(err);
}
console.log('Connected as id ' + connection.threadId);
});
var sql = "INSERT INTO 'mobile'.'main' ('userId') VALUES (?);"
var inserts = [user];
db.query(sql, inserts, function (error, results) {
console.log('query');
if (error) {
return reject(err);
} else {
console.log('Success Query');
return resolve(results);
}
});
db.end(function (err) {
if (err) {
console.error('Error connecting: ' + err);
}
console.log('Connection closed!');
});
});
}
app.get('/api/mysql/:user', function (req, res) {
var user = req.params.user;
addUsers(user)
.then (result => { // When addUsers will resolve promise will be in then.
res.json({
SQLResp: 'Query succes',
result: result
});
})
.catch(err => { // If promise is rejected then on catch
res.json({
SQLResp: 'Query err',
result: err
});
});
});
Вам нужно передать обратный вызов в свою функцию addUser и вызвать его в вашем connection.query
с результатами.
В настоящее время, когда вы возвращаетесь, вы возвращаетесь в другой обратный вызов, что означает, что данные более или менее выбрасываются.
Это также позволит вам обрабатывать все случаи ошибок так, как вы можете сообщить об этом пользователю.