2011-05-04 30 views
10

Im nuevo en node y express y tengo una pregunta con respecto a usando mysql. Tengo un formulario de inicio de sesión que se publica en '/ login'. Estoy usando el módulo node-mysql .Uso de Mysql con Nodejs y Express (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('/'); 
      } 
     } 
    ); 
}); 

¿Es esta una buena manera de hacerlo? ¿Puedo continuar de esta manera? ¿Y las consultas SQL escapadas de alguna manera, o tengo que escribir esa funcionalidad yo mismo?

Última pregunta: Estoy reescribiendo un sitio, y utilicé el db mysql. ¿Hay algún beneficio en para cambiarlo a mongodb?

Cualquier ayuda se agradece

Gracias de antemano

George

Respuesta

10

Es esta una buena manera de hacerlo? ¿Puedo continuar de esta manera? ¿Y las consultas sql se han escapado de alguna manera, o tengo que escribir esa funcionalidad ?

Primero debe desinfectar sus parámetros de consulta SQL. Por ejemplo, al utilizar la funcionalidad del módulo node-validator para evitar SQL injection attacks.

Estoy reescribiendo un sitio, y utilicé el mysql db. ¿Hay algún beneficio en cambiándolo a mongodb?

En general, depende de la funcionalidad de su sitio y otras cosas. Intenta mirar la pregunta this.

+0

Gracias por la respuesta :) node-validator se ve increíble, justo lo que estaba buscando. Gracias :) – georgesamper

+2

node-mysql ha escapado también. Si lo usas apropiadamente, por supuesto. https://github.com/felixge/node-mysql#escaping-query-values ​​ – Pijusn

14

El objeto Cliente node-mysql tiene un método de escape que puede ayudar con esto. Puede llamarlo manualmente o usar la forma de consulta que acepta parámetros. Por ejemplo:

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

Nota usando el método de parámetros en realidad no enviar una consulta parametrizada a MySQL, que sólo se ocupa de la sustitución de parámetros y escapar para usted.

Por cierto, aquí es lo que hace el escape:

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

+0

El enlace de arriba ahora no es válido (404). –

+3

Se corrigió el enlace. –

+1

El enlace no es válido de nuevo – Joaolvcm

5

Si su sitio se vuelve más complejo que podría estar interesado en el uso de un ORM para sus cosas MySQL. Sequelize utiliza el nodo-mysql lib y gestiona las cosas completas de sql para: http://sequelizejs.com

Cuestiones relacionadas