Использование Mysql с Nodejs и Express (node-mysql) - PullRequest
10 голосов
/ 04 мая 2011

Я новичок в узле и экспресс, и у меня есть вопрос, касающийся используя mysql. У меня есть форма входа в систему, которая отправляет сообщения в «/ login». Я использую узел-MySQL модуль.

 app.get('/site', function(req, res){
    if (req.session.is_logged_in === true) {
        res.render('site/start', {
            title: 'News'
        });
    } else {
        res.redirect('/');
    }
});

app.post('/login', function(req, res){
    client.query('SELECT id, user_name FROM user WHERE email="' + req.body.login + '" AND password="' + Hash.sha1(req.body.password) + '"',
        function (err, results, fields) {
            if (err) {
                throw err;
            }
            if (results[0]) {
                req.session.userInfo = results[0];
                req.session.is_logged_in = true;
                res.render('site/start', {
                    title: 'News'
                });
            }
            else {
                res.redirect('/');
            }
        }
    );
});

Это хороший способ сделать это? Могу ли я продолжить этот путь? И не удалось ли каким-либо образом избежать SQL-запросов или мне нужно написать функциональность сама?

Последний вопрос: я переписываю сайт, и я использовал базу данных mysql. Здесь какие-либо преимущества, чтобы изменить его на mongodb?

Любая помощь будет оценена

Заранее спасибо

George

Ответы [ 3 ]

14 голосов
/ 08 мая 2011

Клиентский объект node-mysql имеет метод escape, который может помочь с этим. Вы можете вызвать это вручную или использовать форму запроса, которая принимает параметры. Например:

client.query('SELECT id, user_name FROM user WHERE email=?',
    [req.body.login], ...

Обратите внимание, что использование метода параметров на самом деле не отправляет параметризованный запрос в mysql, оно просто заботится о подстановке и экранировании параметров.

Кстати, вот что делает побег:

https://github.com/felixge/node-mysql/blob/master/lib/protocol/SqlString.js#L3

10 голосов
/ 04 мая 2011

Это хороший способ сделать это?Могу ли я продолжить этот путь?И не удалось ли каким-либо образом избежать SQL-запросов или мне нужно написать эту функциональность самостоятельно?

Сначала следует санировать параметры запроса SQL.Например, используя функциональность модуля node-validator , чтобы предотвратить атаки SQL-инъекций .

Я переписываю сайт, и я использовалmysql db.Есть ли какая-то польза от перехода на mongodb?

В общем, это зависит от функциональности вашего сайта и других вещей.Попробуйте взглянуть на этот вопрос.

5 голосов
/ 16 июня 2011

Если ваш сайт становится более сложным, вас может заинтересовать использование ORM для вашего MySQL.Sequelize использует библиотеку node-mysql и управляет всем, что связано с SQL, для: http://sequelizejs.com

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...