2013-09-26 51 views
0

我想修改查询我的服务器端(node.js的),看起来像这样:变量查询中的node.js

var http = require('http'); 
var query = "SELECT * FROM Users WHERE Email='[email protected]'"; 

这是硬编码查询。我试图做这样的事情(电子邮件是在HTML文档从输入文本区域拉入一个变量):

var http = require('http'); 
var query = "SELECT * FROM Users WHERE Email=" + "'" + email + "'"; 

我使用jQuery来处理从一个JavaScript文件这样的要求:

$.ajax({ 
     url: "http://127.0.0.1:8000/", 
     type: "POST", 
     success: function(dataRcvd) { 
      alert(dataRcvd); 
     } 

如果我知道如何做到这一点,我可以动态更新var query不同的SQL查询/存储过程。

+1

您不会向服务器发送任何数据。 – undefined

+0

如何将数据发送到服务器?我试图在.ajax调用中添加'data:email',但不确定如何在服务器端引用它。 – gjw80

+0

那么,在这种情况下,您并未定义任何标识符,数据:{email:'value'}'。现在你可以在你的处理程序中读取参数,http://nodejs.org/api/http.html – undefined

回答

0
// server.js 
var http = require('http'); 
function handler(req, res){ 
    console.log('Server got '+req.body.email); 
    var query = "SELECT * FROM Users WHERE Email=" + "'" + req.body.email + "'"; 
    someAsyncSQLCall(query, function(rows){ 
    res.send(200, rows); 
    }); 
}; 

http.createServer(handler).listen(3000); 

//client.js 
$.ajax({ 
     url: "http://127.0.0.1:8000/", 
     type: "POST", 
     data: {email: 'value' }, 
     success: function(dataRcvd) { 
      alert(dataRcvd); 
     } 
0

这是一个令人难以置信的不好主意(字符串连接);任何人都可以在您的表单中发布SQL注入攻击并丢弃您的数据库或执行任何其他恶意的事情。

我不确定你正在使用哪个数据库,但他们中的大多数都有一种参数化查询方式,可以消除这些类型的攻击。

Checkout node-postgres(pg模块),其中包含了如何使用PostgreSQL的方法示例。