1

node-postgresクライアントを使用してこのコードを実行しようとすると、「エラー: パラメータ $1 がありません」というメッセージが表示されます。

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' }
4

1 に答える 1

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);
    });    
  });
});

また、投稿の送信時に変数名の大文字と小文字を標準化することをお勧めします。

于 2013-10-18T18:27:41.743 に答える