Search the Community
Showing results for '{query}'.
Found 91 results
-
You can use exports. /* File: database.js */ var mysql = require('mysql'); const connection = mysql.createConnection({ host: "localhost", user: "root", database: 'brv_ragemp', password: "" }); connection.connect(function(err) { if (err) throw err; console.log("Connected!"); }); module.exports.connection = connection; Other file /* File: index.js */ var db = require ("./database"); db.connection.query("SELECT * FROM contas", (err, row, fields)=> { console.info(row); }); More info: https://www.w3schools.com/nodejs/nodejs_modules.asp
-
I put this into query and execute : INSERT INTO accounts (socialName, password, status) VALUES ('Fusion', MD5('1234'), 1); But I see that is my database is not readable! Can you help how to put in diferent way?
-
That should work... // Connection file var mysql = require('mysql'); module.exports = { Handle: null, Connect: function(callback) { this.Handle = mysql.createConnection({ host : 'your_host', user : 'your_user', password : 'your_pass', database : 'your_database' }); this.Handle.connect(function(e) { if ( !e ) { callback(); } else console.log ("Error in Database " + e); }); } }; // White list file var db = require("./database"); mp.events.add("playerJoin", (player) => { db.Handle.query("SELECT * FROM whitelist WHERE socialID = ?", [player.socialClub], function(e, result) { if (!result.length){ player.kick("Not in whitelist."); }else{ // In Whitelist :) } }); But instead of using the social club, I recommend creating a login with a unique user ID. Players with pirate gta do not have the socialClub! Sorry for my English, I'm Brazilian.
- 1 reply
-
- 1
-
-
Как вариант еще так можешь записать. sql.query("INSERT INTO users (login, password, rights) VALUES (?,?,?)", [player.name, password, rights], function (e, r) { if (e) throw e; console.log(r); });
-
Добрый день. Я пытаюсь считать данные из таблицы и вывести их в консоль, но ничего не выводится. Что сделано: Установлен сервер mysql, а также Workbench. Посредством workbench создана таблица users. Установлен node.js и модуль mysql. Привожу код подключения: var mysql = require('mysql'); var sql = mysql.createConnection({ host : 'localhost', user : 'some_user', password : 'some_password', database : 'some_db' }); sql.connect(function(err){ if(err){ console.log('error'); }else{ console.log('connected'); } }); В консоли пишет connected. И внесенные данные выводит. Но когда пытаюсь внести в таблицу данные: sql.query("INSERT INTO users (login, password, rights) VALUES ("+player.name+", pass, 1)"); То ничего не выходит. Прошу помощи)
-
Не нужно исключение генерировать sql.query("INSERT INTO users (login, password, rights) VALUES ("+player.name+", 1234, 1)", function(err, result){ if(err){ console.log(err.message); }else{ console.log('inserted'); } });
-
sql.query("INSERT INTO users (login, password, rights) VALUES ("+player.name+", 1234, 1)", function(err, result){ if(err){ throw err; console.log(err); }else{ console.log('inserted'); } }); Так?
-
Как сделать авторизацию и регистрацию в игре? (MYSQL)
ddoommbbaass replied to ddoommbbaass's topic in Scripting
Спасибо, всё работает, 100%. Вот можете ещё кое в чем помочь? Захожу на сервер и нажимаю на ALT+TAB (ну сверну окно) игра через 3 сек закрывается а в консоли сервера пишет вот что: [N] Incoming connection from 127.0.0.1:64859 d:\Download\GAMES\progress\packages\keker\commands\database.js:798: Uncaught Error: Cannot enqueue Query after invoking quit. events.js:4638: Uncaught Error: Cannot enqueue Quit after invoking quit. d:\Download\GAMES\progress\packages\keker\commands\database.js:798: Uncaught Error: Cannot enqueue Query after invoking quit. events.js:4638: Uncaught Error: Cannot enqueue Quit after invoking quit. [N] 127.0.0.1:64859 timed out. -
Как сделать авторизацию и регистрацию в игре? (MYSQL)
ZDiels replied to ddoommbbaass's topic in Scripting
Привет! Для начала тебе необходимо установить node.js, а затем загрузить пакет для работы с mysql. Как это сделать описано здесь. После этого необходимо создать скрип, который будет заниматься регистрацией наших пользователей. Перейдем в каталог server\packages\keker\commands и создадим файл с именем database.js и поместим в него следующий код: var mysql = require('mysql'); var connection = mysql.createConnection({ //создаем подключение к БД host : 'localhost', user : 'root', password : '', database : 'WARNB' }); module.exports = //добавляем новые команды пользователей { "login": (player, args) => { if(args.length == 3){ //параметров должно быть 3 (команда, логин, пароль) connection.connect(); //подключаемся к БД connection.query('SELECT * FROM `users` WHERE `login` = "' + args[1] + '" AND `password` = "' + args[2] +'";', function(err, rows, fields) { //делаем запрос if (err){ //если возникла ошибка player.outputChatBox("Ошибка входа. Попробуйте снова"); //выводим в чат сообщение об ошибке throw err; } else{ console.log(rows[0].login, ' is login'); //выводим информацию о входе в консоль player.outputChatBox("Добро пожаловать, " + rows[0].login); //выводим информацию о входе в чат игрока } }); connection.end(); //завершаем соединение } else player.outputChatBox("Используйте /login [имя пользователя] [пароль] для входа"); //если количество параметров не соответвует 3 }, "registration": (player, args) => { if(args.length == 3){ connection.connect; connection.query('INSERT INTO `users` VALUES ("' + args[1] + '", "' + args[2] + '", NOW(), "");', function(err, rows, fields) { if (err){ player.outputChatBox("Ошибка регистрации. Попробуйте снова"); throw err; } else{ player.outputChatBox("Учетная запись успешно создана!"); } }); connection.end(); } else player.outputChatBox("Используйте /registration [имя пользователя] [пароль] для регистрации"); } }; Конечно же в mysql уже должна быть создана БД и таблица users с полями login и password. Ну а при необходимости сможешь расширить ее, думаю теперь будет понятней. Вот как-то так реализовал я. Не гарантирую что это правильный подход, ведь сам тоже совсем недавно занялся программированием. Но тем не менее решил помочь) -
Found the solution! It is necessary to prescribe: connection.query("SET SESSION wait_timeout = 604800"); // 7 days timeout
-
By the way, inside players.js, you've forgotten to add in the Admin column inside server_players DB.Handle.query("CREATE TABLE IF NOT EXISTS `server_players` (`ID` int(11) NOT NULL,`Name` varchar(24) NOT NULL,`Password` varchar(128) NOT NULL, `Admin` int(3) NOT NULL) ENGINE=InnoDB DEFAULT CHARSET=latin1;", function() { } ); Line 43, I haven't tried it but that should probably fix it.
-
I have big problem with my mysql connection var mysql = require("mysql"); console.log("step 1"); var connection = mysql.createConnection({ host : "127.0.0.1", user : "root", password : "", database : "gtav" }); console.log("step 2"); connection.connect(function(e) { console.log("step 3"); if (e) { console.log("<b>DATABASE:</b> Wystąpił problem z połączeniem"); throw e; } else { console.log("<b>DATABASE:</b> Połączono z bazą danych"); } }); console.log("step 4"); connection.query("SELECT uuid FROM sq_accounts WHERE uuid=1", function (e, result) { console.log(result); console.log("step 4"); }); console.log("step 5"); Console print steps 1, 2, 4 and 5, soo connection.connect not work but i don't know why :v
-
Как сделать авторизацию и регистрацию в игре? (MYSQL)
Daniel Clark replied to ddoommbbaass's topic in Scripting
После регистрации, пытаюсь залогиниться, пишет ошибку в консоли и в игре(keker\commands\reg.js:782: Uncaught Error: Cannot enqueue Query after invoking quit.) -
Как сделать авторизацию и регистрацию в игре? (MYSQL)
cacao replied to ddoommbbaass's topic in Scripting
code style : https://learn.javascript.ru/coding-style по ссылке советы по оформлению кода, отступы, оформление фигурных скобок, название переменных функций там однако предлагают два пробела, но как по мне это на вкус извечный вопрос, что лучше - таб или 4 пробела конечно 4 пробела, пробел универсален, а вот таб может иметь разную ширину на разных платформах, в разных программах --- а не надо бороться, экранирование символов встроено по умолчанию в пакет 'mysq' синтаксис такой connection.query('SELECT name FROM Users WHERE id = ?', [id], callback) и id экранируется по дефолту но если надо самому строить запросы, то в помощь гугл с запросов "экранирование символов от SQL инъекций" ---- это конечно экономия на спичках, но тебе не обязательно высчитывать length у результата, достаточно простое условие if (rows) ... -
Декораторы скоро войдут в спецификацию языка, это чудесный и очень гибкий инструмент, позволяющий умело внедрять мета программирование; изменять поведение функции; валидировать ваши данные; элегантный код; и многое другое... Всецело, рай для программиста! Но пока, мы можем их использовать без нативных операторов, благодаря функциям высшего порядка. Данный урок содержит в основном пересказ из оригинальной статьи на ресурсе learn javascript, по названию "Декораторы". Данный урок предполагает наличие неплохих знаний в программировании, в javascript. Итак, к коду! Внимание! Версия без комментариев, http://pastebin.com/JZNgHwdY ## метод afterLogin все так находится внутри метода login, фиксану чуть позднее, вся проблема в асинхронности /* Цель - Не допускать юзеров, которые находятся в черном списке */ /* Паттерн декораторы, подробнее - https://learn.javascript.ru/decorators */ /* Имеем обычный метод логина пользователя, куда передаются два параметра - логин и пароль соответственно. Однако, мы захотели навесить на метод login событие, чтобы при login у нас проверялся (условно) IP адрес из черного списка и если все впорядке, проводить логин. Самый очевидный вариант это просто дополнить метод login проверкой вида if ( User.blackList.indexOf( player.ip ) >= 0 ) return false; Однако, предположим что наш класс может быть унаследован и метод login перезаписан по своему или даже нам банально нужно вести какую нибудь статистику под авторизацию пользователя, и записывать попытки входа Не вопрос! Скажем мы, можно все пихнуть в метод login, он правда расбухнет и станет очень не читабельным, однако это реализация вполне годная на жизнь Но опять же, к нашим проблемам, -- метод могут переопределить, а поведение мы все таки хотим оставить так как же быть? На помощь приходят Декораторы! Суть декораторов проста -- мы подмешиваем в исходную функцию новое поведение, мы вольны задавать новое поведение как угодно! Давайте попробуем... Для начала реализация метода декоратора, метод bind Все просто -- метод bind всего лишь возвращает новую функицю и все! Все просто! (Немного теории: в функциональщине когда функция возвращает другую функцию, такая функция называется функцией высшего порядка) */ let mysql = require('mysql') // подключаем либу mysql, npm install mysql , SHA256 = require('crypto-js/sha256') // подключаем либу криптографии, можно стянуть npm install crypto , config = require('./config') // подключаем условный конфиг config.js, который якобы лежит у нас в корне каталога и возвращает объект { config: { } } , connection = mysql.createConnection(config.db) // создаем коннект к бд // описываем класс class User { constructor() { // по дефолту ставим статус авторизации как false this.logged = false // по дефолту ставим попытки входа на 0 this.loginAttempts = 0 // а максимальное количество попыток ставим равное 3 this.maxLoginAttempts = 3 // здесь навешиваем события, соответственно до и после this.login = this.bind (this.login, this.onBeforeLogin, this.onAfterLogin) } // собственно здесь вся магия, мы переиначиваем поведение func так как нам // захочется, добавляя до и после вызов событий // причем, заметьте что afterFunc передается в качестве параметра, ведь // node.js асинхронный, а значит мы должны подождать конца запроса // прежде чем использовать событие после авторизации bind (func, beforeFunc, afterFunc) { return function() { // здесь важно указать именно function() а не () => { }, // так как () => { } не имеет своего arguments и this // валидируем, может ли пользователь приступить к авторизации // параметр this обозначает наш экземпляр класса User let canLogin = beforeFunc.call(this, arguments) // func.call вызывает функцию func с параметрами arguments, afterFunc и передает туда // наш экземпляр объекта User // если canLogin = true, то совершаем попытку входа, иначе возвращаем ничего return canLogin ? func.call(this, arguments, afterFunc) : null } } // условный черный список static get blackList() { return ['127.0.0.1']; } login (player, username, password, callback) { if (this.logged) return true // условный запрос к базе данных connection.query('SELECT * FROM users WHERE username = ?, password = ?',[ username.toString(), SHA256(password.toString()), // хэшируем пароль ], function(err, result) { if (!err) { // ошибок нет, все окей // Запись с такой парой найдена? if (result.length) { this.logged = true return callback(username, this.logged, this.loginAttempts) } else { return callback(username, this.logged, ++this.loginAttempts) } } else { debug(`User::login, ошибка запроса к БД, причина: ${err}`) } }) } // сюда ушли все те же самые параметры что и в login // (т.е. player, username, password, без callback, его мы подключаем позже) // однако здесь их явно не указываем за не надобностью beforeLogin (player) { return this.loginAttempts > this.maxLoginAttempts || User.blackList.indexOf(player.ip) >= 0 ? false : true } afterLogin (username, status, count) { if (status) { // Пишем в какой-нибудь условный дебаг debug(`Пользовател ${username} авторизовался! ${count ? 'Его количество попыток входа = ' + count : ''}`) this.loginAttempts = 0 } else { // Пишем в какой-нибудь условный дебаг debug(`Ошибка авторизации. Количество попыток входа с логином ${username} = ${count.toString()}`) } return status } } статья дорабатывается... вопросы, пожелания, критика
-
Очень часто люди задают вопрос, вроде: "как установить пакеты node.js для сервера?". В данной статье попытаюсь доходчиво объяснить как это сделать. Качаем, устанавливаем node.js, желательно версию 7.3.0, т.к. на сервер стоит именно она. Жмем пуск, открываем командную строку (Win + R, cmd). Переходим в папку с сервером (в моем случае это D:\rage_mp_server). Выглядит как-то так (текст из cmd): D: cd rage_mp_server Инициализируем npm package.json файл: npm init -y Устанавливаем необходимые нам пакеты (mysql к примеру): npm install mysql Далее можем делать require в интересующем нас .js файле (на примере index.js): var mysql = require('mysql'); var connection = mysql.createConnection({ host : 'localhost', user : 'me', password : 'secret', database : 'my_db' }); connection.connect(); connection.query('SELECT 1 + 1 AS solution', function(err, rows, fields) { if (err) throw err; console.log('The solution is: ', rows[0].solution); }); connection.end();
