Я пытаюсь реализовать сброс пароля. Итак, я беру номер телефона пользователя, получаю документ из базы данных, используя номер телефона, чтобы найти его, и я беру новый пароль и пытаюсь обновить соответствующий документ, используя запрос PUT в моей базе данных Cloudant.
app.post('/pass_rst', function(req,response){
var log='';
//log is just for me to see what's happening
var phone= req.body.phone;
log+=phone+'\n';
db.find({selector:{'phone':phone}}, function(err, result){
if(err){
throw err;
}
if(result.docs.length==0){
response.send('User doesnt exist');
}else{
var existing_data=result.docs[0];
log+=JSON.stringify(existing_data)+'\n';
var upd_pswd= req.body.new_password;
log+=upd_pswd+'\n';
var new_data=existing_data;
new_data.password=upd_pswd;
log+=JSON.stringify(new_data)+'\n';
var id= result.docs[0]._id;
log+=id+'\n';
//make PUT request to db
var options={
host:dbCredentials.host,
port:dbCredentials.port,
path:'/'+dbCredentials.dbName+'/'+id,
//url: dbCredentials.url+'/'+dbCredentials.dbName+'/'+id,
method:'PUT',
json:new_data,
headers:{
'Content-Type':'application/json',
'accept':'*/*'
}
};
log+=JSON.stringify(options)+'\n';
var httpreq= http.request(options);
//log+=JSON.stringify(httpreq);
httpreq.on('error', function(e){
response.send('Error'+e.message);
});
response.send(log+'\n\n\nUpdated');
}
});
});
dbCredentials определен выше следующим образом:
dbCredentials.host = vcapServices.cloudantNoSQLDB[0].credentials.host;
dbCredentials.port = vcapServices.cloudantNoSQLDB[0].credentials.port;
dbCredentials.user = vcapServices.cloudantNoSQLDB[0].credentials.username;
dbCredentials.password = vcapServices.cloudantNoSQLDB[0].credentials.password;
dbCredentials.url = vcapServices.cloudantNoSQLDB[0].credentials.url;
Я пытался с этим повозиться, но в лучшем случае я не получаю сообщение об ошибке и вижу «Обновлено», но на самом деле в базе данных ничего не происходит. Иногда я получаю сообщение об ошибке: 502 Bad Gateway: Зарегистрированная конечная точка не смогла обработать запрос.
Если вы видите, что происходит не так, пожалуйста, дайте мне знать. Спасибо.
Это документация по обновлению документов в cloudant.
ОБНОВИТЬ
Обновление документа
PUT /$DATABASE/$DOCUMENT_ID HTTP/1.1 { "_id": "apple", "_rev": "1-2902191555", "item": "Malus domestica", "prices": { "Fresh Mart": 1.59, «Максимальная цена»: 5,99, «Apples Express»: 0,79, «Gentlefop's Shackmart»: 0,49 } }
Чтобы обновить (или создать) документ, сделайте запрос PUT с обновленным содержимым JSON и последним значением _rev (не требуется для создания новых документов) на https://$USERNAME.cloudant.com/$DATABASE/$DOCUMENT_ID.
Если вы не предоставите последнюю версию _rev, Cloudant ответит ошибкой 409. Эта ошибка предотвращает перезапись данных, измененных другими процессами. Если кворум записи не может быть достигнут, возвращается ответ 202.
Пример ответа: { "ok":true, "id":"apple",
"rev":"2-9176459034" }Ответ содержит идентификатор и новую версию документа или сообщение об ошибке в случае сбоя обновления.