Postgres 用の pg-promise を使用してノードに API を作成しました。これはうまく機能しますが、PUT ステートメントを変更して入力の NULLS をより適切に処理する方法を考えています。
以下は、PUT ステートメントのコードです。
//UPDATE a single record
function updateRecord(req, res, next) {
db.none('update generic1 SET string1=$1,' +
'string2=$2,' +
'string3=$3,' +
'string4=$4,' +
'string5=$5,' +
'string6=$6,' +
'integer1=$7,' +
'integer2=$8,' +
'integer3=$9,' +
'date1=$10,' +
'date2=$11,' +
'date3=$12,' +
'currency1=$13,' +
'currency2=$14' +
'WHERE id = $15',
[req.body.string1,
req.body.string2,
req.body.string3,
req.body.string4,
req.body.string5,
req.body.string6,
parseInt(req.body.integer1),
parseInt(req.body.integer2),
parseInt(req.body.integer3),
req.body.date1,
req.body.date2,
req.body.date3,
parseInt(req.body.currency1),
parseInt(req.body.currency2),
parseInt(req.params.id)])
.then(function(){
res.status(200)
.json({
'status': 'success',
'message': 'updated one record'
});
})
.catch(function(err){
return next(err);
});
}
これでこのステートメントは機能しますが、次の更新に NULLS を渡すと、既存の値も削除されます。たとえば、string1 と date2 だけを更新したい場合は、json オブジェクト全体を送信する必要があります。そうしないと、他のすべての値が NULL に設定されます。
これを処理するより良い方法はありますか?代わりに PATCH 動詞を使用する必要がありますか??