【发布时间】:2016-07-20 18:20:13
【问题描述】:
我正在尝试编写一个在用户对象上添加或编辑某些字段的函数。
当我尝试保存用户时,问题来了,如果我使用user.save,Promise 被拒绝,错误为 206 UserCannotBeAlteredWithoutSessionError。
但是,如果我获得了会话 ID(并且有关它的文档很少),则承诺永远不会得到解决,也不会被拒绝。该应用似乎只是跳转到回调。
我的功能:
function update(user, callback) {
let query = new Parse.Query(Parse.User);
query.equalTo("username", user.email);
query.find().then(
(users) => {
if(users.length === 0) {
callback('Non existent user');
} else {
let user = users[0];
// user.set('some', 'thing');
console.log('save');
user.save(/*{
sessionToken: user.getSessionToken()
}*/).then(
(test) => {
console.log('OK - ' + test);
callback();
}, (err) => {
console.log('ERR- ' + require('util').inspect(err));
// console.log(callback.toString());
callback(error.message);
}
);
}
},
(error) => {
callback(error.message);
}
);
}
调用:
var async = require('async'),
baas = require('./baas.js');
async.waterfall([
(callback) => {
callback(null, {
email: 'user@test.com',
password: 'password'
});
},
(user, callback) => {
console.log('connect');
baas.connect(() => { //Initialize the connection to Parse, and declare use of masterKey
callback(null, user);
});
},
(user, callback) => {
console.log('update');
baas.update(user, (err) => {
callback(err);
});
}
], (err) => {
console.log('Error: ' + err);
});
日志变成: 没有会话令牌:
connect
update
save
ERR- ParseError { code: 206, message: 'cannot modify user sA20iPbC1i' }
使用会话令牌:
connect
update
save
我不明白承诺怎么可能只是回调而不打印任何内容,也不明白为什么在任何地方都没有引发错误。
编辑:
按照@user866762 的建议,我尝试将查询替换为Parse.User.logIn,并使用生成的User 对象。
虽然这个解决方案给了我一个sessionToken,但最终结果是一样的,如果我不提供会话令牌,则解析崩溃,如果我提供,则给我一个错误。
【问题讨论】:
-
如果你在
console.log(user.getSessionToken())之前console.log('save')会发生什么? -
@user866762:早该想到的,打印
undefined
标签: javascript node.js parse-server