2013-10-14 108 views
1

我得到「錯誤:沒有參數$ 1」時,我嘗試使用node-postgres客戶端來運行這段代碼:

app.post('/newcause', function (req,res){ 
    console.log(req.body); 

    var g; 

    var r = []; 

    for (g in req.body) 
    { 
    r[g]=req.body[g]; 
    console.log('r[g] is ' + r[g]); 
    } 

    client = pg.connect(connectionString, function(err, client, done){ 
    if(err) console.log(err); 
    client.query('INSERT INTO causes (cause_name, goal, organization, sponsor, submitter) VALUES ($1,$2,$3,$4,$5)', r, function(err){ 
     console.log('This is r' + r) 
     if (err) console.log(err); 
    });  
    }); 
}); 

有什麼建議?

PS,這是完全錯誤的語句:

{ [error: there is no parameter $1] 
    name: 'error', 
    length: 87, 
    severity: 'ERROR', 
    code: '42P02', 
    detail: undefined, 
    hint: undefined, 
    position: '81', 
    internalPosition: undefined, 
    internalQuery: undefined, 
    where: undefined, 
    file: 'parse_expr.c', 
    line: '812', 
    routine: 'transformParamRef' } 
+1

什麼是'r'?你在哪裏傳遞五個查詢參數? – Thilo

+0

我編輯了包含更多關於r的信息。 –

+0

看起來'req.body'不像你期望的那樣。向我們展示您從客戶端使用的POST來調用所有這些。 –

回答

1

從執行查詢的錯誤意味着r是沒有得到正確填充。這樣您的系統不提高(查詢)下游的錯誤,而不是在問題根源值得被明確有關用戶輸入:

app.post('/newcause', function (req,res){ 
    console.log(req.body); 

    var g; 

    var r = []; 

    r.push(req.body.causename, req.body.Goal, req.body.Organization, req.body.sponsor, req.body.submitterEmail); 

    client = pg.connect(connectionString, function(err, client, done){ 
    if(err) console.log(err); 
    client.query('INSERT INTO causes (cause_name, goal, organization, sponsor, submitter) VALUES ($1,$2,$3,$4,$5)', r, function(err){ 
     console.log('This is r' + r.toString()) 
     if (err) console.log(err); 
    });  
    }); 
}); 

另外值得一提的是,這可能是規範一個好主意,你的提交後提交的變量名稱。

+0

謝謝!這工作,但我不確定爲什麼。想知道我的循環有什麼問題。 。 。 –

+0

您不能將'r'(類型爲'Array')填充爲'Object'類型,這就是您正在做的。您填充數組的方式不會創建基於零的元素索引,即。您將無法訪問元素r [0] ... r [4],因爲0-4不是索引。 – kompreni