所以我正在运行 Sailsv0.10,并且我有一个相当简单的蓝图覆盖用于在我的 WorkoutController 中创建。
create: function(req, res) {
var workout = req.params.all();
workout.user = req.user.id;
sails.log.verbose(workout)
Workout.create(workout).exec(function(err, workout) {
// Error handling
if (err) return res.negotiate(err);
res.send(201);
res.ok(workout.toJSON());
});
},
模型看起来像这样
锻炼.js ->
module.exports = {
attributes: {
/* e.g.
nickname: 'string'
*/
date : "date",
input: {
type: 'string',
enum: ['auto','manual']
},
tss : "float",
user: {
model: 'user'
}
}
};
当我向 /workout 发送一个 http POST 时,一切都按预期工作,但是当我使用sails io 套接字客户端通过套接字发送它时,我得到以下信息
verbose: Routing message over socket: { method: 'post',
data: { tss: 0, date: '2014-07-07T14:00:00.000Z', input: 'manual' },
url: '/workout',
headers: {} }
verbose: sending data ack packet
verbose: websocket writing 6:::2+[{"body":{},"headers":{},"statusCode":500}]
我不确定状态代码 500 是否相关,但没有其他有用信息。
为了尝试定位我也尝试过的问题
- 禁用覆盖功能
- 删除模型中的关联
- 删除枚举
- 使用通过套接字工作的另一个模型的相同代码进行测试
更新,所以问题似乎与政策有关
WorkoutController : {
"*" : "isBasicPassportAuthenticated"
},
isBasicPassportAuthenticated
// Credit:
// @theangryangel https://gist.github.com/theangryangel/5060446
// @Mantish https://gist.github.com/Mantish/6366642
// @anhnt https://gist.github.com/anhnt/8297229
var passport = require('passport');
// We use passport to determine if we're authenticated
module.exports = function(req, res, next) {
if (req.isAuthenticated())
return next();
passport.authenticate(['basic','local'], function(err, user, info) {
if (err) return next(err);
if (!user) {
return res.forbidden('You are not permitted to perform this action.');
}
req.logIn(user, function(err) {
if (err) return next(err);
next();
});
})(req, res, next);
};
一切看起来都很好,所以我仍然不确定发生了什么