Javascript node.js中的变量查询

Javascript node.js中的变量查询,javascript,jquery,ajax,node.js,Javascript,Jquery,Ajax,Node.js,我正在尝试修改服务器端(node.js)上的查询,如下所示: var http = require('http'); var query = "SELECT * FROM Users WHERE Email='Test.User@TestUser.com'"; 这是硬编码查询。我正在尝试这样做(电子邮件是从HTML文档中的输入文本区域拉入的变量): 我使用JQuery处理来自javascript文件的请求,如下所示: $.ajax({ url: "http://127.0.0.

我正在尝试修改服务器端(node.js)上的查询,如下所示:

var http = require('http');
var query = "SELECT * FROM Users WHERE Email='Test.User@TestUser.com'";
这是硬编码查询。我正在尝试这样做(电子邮件是从HTML文档中的输入文本区域拉入的变量):

我使用JQuery处理来自javascript文件的请求,如下所示:

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

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

这是一个非常糟糕的主意(字符串连接);任何人都可以在您的表单中发布SQL注入攻击,并删除您的数据库或做任何其他邪恶的事情

// 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);
        }
我不确定您使用的是什么数据库,但大多数数据库都有一种执行参数化查询的方法,可以帮助您抵御此类攻击


签出节点postgres(pg模块),其中有使用PostgreSQL时如何执行此操作的示例。

您不向服务器发送任何数据。如何向服务器发送数据?我试图在.ajax调用中添加
data:email
,但不确定如何在服务器端引用它。在这种情况下,您不定义任何标识符,
data:{email:'value'}
。现在可以在处理程序中读取参数,
// 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);
        }