正如您在下面的代码中看到的,我能够找到用户,因为我得到了console.log('log1',userSettings.PASSWORD);打印在终端上,我得到一个user.Settings.PASSWORD返回。所以到目前为止一切正常。 但是当我尝试进行更新时,我最终得到错误:
我收到以下错误:详细信息:RequestError:无效的列名'id'
这就是我的代码的样子:
updateSettings: function(params) {
var Promise = require('bluebird');
return new Promise(function(fullfill, reject) {
sails.models.customer.findOne()
.where({
USERNAME: params.username,
PASSWORD: params.currentPassword
}).exec(function(err, userSettings) {
if (err) {
reject(new Error('Error finding user'));
console.error(err);
}else if (userSettings) {
console.log('log1', userSettings.PASSWORD);
sails.models.customer.update({
USERNAME: params.username
},
{
PASSWORD: params.newPassword
}).exec(function(err, userSettingsUpdated) {
if (err) {
console.error(err);
reject(new Error('Error updating the user settings'));
}else {
fullfill(userSettingsUpdated);
}
});
}
});
});
}
答案 0 :(得分:0)
Sails.js / Waterline already implements Bluebird作为promise库,因此您可以将查询方法用作承诺(当然,取决于您使用的版本)。
我冒昧地重写你的代码。我将sails.models.customer
转换为Customer
。如果你有使用sails.models.customer
的原因,请原谅。
正如galactocalypse已经说明的那样,错误可能不在您发布的代码中。我认为可能会发生错误,因为您的Customer
模型中没有您想要用来保存Customer
实例的ID属性。
如果您需要更多帮助,请回复。
updateSettings: function(params) {
var where = {
USERNAME: params.username,
PASSWORD: params.currentPassword
};
return Customer.findOne().where(where)
.then(function(userSettings) {
sails.log.info('log1', userSettings.PASSWORD);
return Customer.update({ USERNAME: params.username }, {PASSWORD: params.newPassword});
})
.then(function(userSettingsUpdated) { /* do whatever you want here */ })
.catch(function(err) { sails.log.error(err); });
});