В настоящее время у меня есть следующая функция mongoose в вызове API hapi.js
server.route({
method: "PUT",
path:"/api/blockinfo/{hash}",
handler: async (request, h) => {
try{
var jsonPayload = JSON.parse(request.payload)
console.log(jsonPayload)
var result = await BlockModel.findOneAndUpdate(request.params.hash, {$set: { height : jsonPayload[Object.keys(jsonPayload)[0]]}}, {new: true});
return h.response(result);
}catch{
return h.response(error).code(500);
}
}
})
Ее цель в основном состоит в обновлении значения с использованием PUT
.В приведенном выше случае он обновит высоту поля и будет работать нормально.
Но что, если я хочу обновить произвольное поле?
Например, мой формат объекта следующий:
{"_id":"5cca9f15b1b535292eb4e468", "hash":"d6e0fdb404cb9779a34894b4809f492f1390216ef9d2dc0f2ec91f95cbfa89c9", "height":301651, "size":883, "time":1556782336, "__v":0}
В приведенном выше случае я обновил значение высоты, используя $set
, но что, если я решу ввести 2 случайных поля для обновления, например, размера и времени.
Это будет мой пост в почтальоне:
{
"size": 300,
"time": 2
}
Ну, очевидно, это не сработает в коде выше, потому что эти поля отсутствуют в наборе.
ТАК, как мне установить этот наборавтоматически распознавать все, что нужно для обновления?
Я пытался упростить его с помощью следующего кода, но он ничего не обновит
server.route({
method: "PUT",
path:"/api/blockinfo/{hash}",
handler: async (request, h) => {
try{
var result = await BlockModel.findOneAndUpdate(request.params.hash, request.payload, {new: true});
return h.response(result);
}catch{
return h.response(error).code(500);
}
}
})
Схема
const BlockModel = Mongoose.model("blocks", {
hash: String,
height: Number,
size: Number,
time: Number
});