candy
Version:
a micro bbs system based on duoshuo.com apis
74 lines (69 loc) • 2.9 kB
JavaScript
// GET /member/:member -> show
// DELETE /member/:member -> destroy
var roles = {
'admin': '(管理员)'
};
exports = module.exports = function($ctrlers, locals, theme) {
var user = $ctrlers.user;
return {
// PAGE: read
show: function(req, res, next) {
if (!req.params.member) return next(new Error('404'));
user.read(req.params.member, function(err, u) {
if (err) return next(err);
if (!u) return next(new Error('404'));
var isMe = res.locals.user && res.locals.user._id == req.params.member;
var freshman = isMe && !res.locals.user.nickname
u.showname = u.nickname || '匿名用户';
if (!u.avatar) u.avatar = locals.url + '/images/avatar.png';
if (!u.url) u.url = locals.url + '/member/' + u._id;
u.role = roles[u.type] || '';
theme.render('flat/member/single', {
member: u,
isMe: isMe,
freshman: freshman
}, function(err, html){
if (err) return next(err);
return res.send(html);
});
});
},
// API: Sync to duoshuo
sync: function(req, res, next) {
var uu = req.body.user;
if (!(uu && typeof(uu) == 'object')) return next(new Error('user required'));
user.findById(req.session.user._id, function(err, u) {
if (err) return next(err);
u.nickname = uu.name;
u.url = uu.url;
u.avatar = uu.avatar;
u.save(function(err) {
if (err) return next(err);
// 同步本地用户到多说
user.sync(locals.site.duoshuo, u, function(err, result) {
if (err) return next(err);
var result = result.body;
if (result.code !== 0) return next(new Error('多说用户同步失败,请稍后再试,详细错误:' + result.errorMessage));
req.session.user = u;
res.json({
stat: 'ok',
user: u
});
});
});
});
},
// API: remove
destroy: function(req, res, next) {
if (!res.locals.user) return next(new Error('signin required'));
if (res.locals.user.type !== 'admin') return next(new Error('signin required'));
user.remove(req.params.member, function(err, uid) {
if (err) return next(err);
res.json({
stat: 'ok',
user: user.body
});
});
}
}
}