Использование Mysql с Nodejs и Express (node -mysql)

Я новичок в node и выражаю, и у меня есть вопрос относительно используя mysql. У меня есть форма входа в систему, которая отправляется в '/login'. Im использует node -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 db. Здесь любые преимущества для его изменения в mongodb?

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

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

Джордж

Ответ 1

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

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

Я переписываю сайт, и я использовал mysql db. Существуют ли какие-либо выгоды для изменить его на mongodb?

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

Ответ 2

Объект клиента node -mysql Client имеет метод 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

Ответ 3

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