2013-09-26 78 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的方法示例。