我在我的帆函数1.0的应用程序,添加一个新用户到MongoDB的,然后在年底应该返回用户对象作为JSON ...Sails.JS - 创建用户不会返回用户对象
的用户确实已添加到集合中,但在尝试获取新用户对象的_id时会引发错误。当我尝试console.log()createdUser时,它返回为Undefined。试图弄清楚用户如何在Mongo中创建,但不能作为同一个函数中的对象返回?
总之寄存器()函数执行以下操作:
- 验证某些输入
- 检查是否有有效的电子邮件地址
- 对密码进行加密
- 查找的Gravatar URL(如果适用)
- 插入用户收集
- 在req.session中设置user._id(错误在此发生)
- 返回用户对象作为JSON
错误:
info: ·• Auto-migrating... (alter)
info: Hold tight, this could take a moment.
info: ✓ Auto-migration complete.
warn: Ignored attempt to bind route (/resend-username) to unknown action :: UserController.resendUsername
info:
info: .-..-.
info:
info: Sails <| .-..-.
info: v1.0.0-37 |\
info: /|.\
info: /|| \
info: ,' |' \
info: .-'.-==|/_--'
info: `--'-------'
info: __---___--___---___--___---___--___
info: ____---___--___---___--___---___--___-__
info:
info: Server lifted in `D:\Development\Sails\goknack-sails-1.0`
info: To shut down Sails, press <CTRL> + C at any time.
debug: -------------------------------------------------------
debug: :: Tue Sep 05 2017 18:08:33 GMT-0500 (Central Daylight Time)
debug: Environment : development
debug: Port : 1337
debug: -------------------------------------------------------
undefined
D:\Development\Sails\goknack-sails-1.0\node_modules\mongodb\lib\utils.js:123
process.nextTick(function() { throw err; });
^
TypeError: Cannot read property '_id' of undefined
at D:\Development\Sails\goknack-sails-1.0\api\controllers\UserController.js:259:47
at D:\Development\Sails\goknack-sails-1.0\node_modules\parley\lib\private\Deferred.js:232:16
at _afterTalkingToAdapter (D:\Development\Sails\goknack-sails-1.0\node_modules\waterline\lib\waterline\methods\create.js:282:22)
at D:\Development\Sails\goknack-sails-1.0\node_modules\sails-mongo\lib\private\do-with-connection.js:223:16
at D:\Development\Sails\goknack-sails-1.0\node_modules\sails-mongo\lib\private\do-with-connection.js:123:18
at Object.success (D:\Development\Sails\goknack-sails-1.0\node_modules\sails-mongo\lib\private\build-std-adapter-method.js:61:47)
at afterMaybeArtificiallyWaiting (D:\Development\Sails\goknack-sails-1.0\node_modules\sails-mongo\node_modules\machine\lib\private\intercept-exit-callbacks.js:406:21)
at maybeArtificiallyWait (D:\Development\Sails\goknack-sails-1.0\node_modules\sails-mongo\node_modules\machine\lib\private\intercept-exit-callbacks.js:220:20)
at afterPotentiallyCaching (D:\Development\Sails\goknack-sails-1.0\node_modules\sails-mongo\node_modules\machine\lib\private\intercept-exit-callbacks.js:240:11)
at _cacheIfAppropriate (D:\Development\Sails\goknack-sails-1.0\node_modules\sails-mongo\node_modules\machine\lib\private\intercept-exit-callbacks.js:98:18)
at Function._interceptExit [as success] (D:\Development\Sails\goknack-sails-1.0\node_modules\sails-mongo\node_modules\machine\lib\private\intercept-exit-callbacks.js:111:9)
at D:\Development\Sails\goknack-sails-1.0\node_modules\sails-mongo\lib\private\machines\create-record.js:99:22
at D:\Development\Sails\goknack-sails-1.0\node_modules\mongodb\lib\collection.js:437:18
at handleCallback (D:\Development\Sails\goknack-sails-1.0\node_modules\mongodb\lib\utils.js:120:56)
at D:\Development\Sails\goknack-sails-1.0\node_modules\mongodb\lib\collection.js:743:5
at D:\Development\Sails\goknack-sails-1.0\node_modules\mongodb-core\lib\connection\pool.js:461:18
^
我曾尝试切换ID来_id,因为它是蒙戈,但没有运气,当我尝试CONSOLE.LOG createdUser它是未定义。
该记录正在数据库中创建...任何帮助,我可能会搞砸了,将不胜感激。
完整的注册功能,我使用:
register: function (req, res) {
if (_.isUndefined(req.param('first'))) {
return res.badRequest('A first name is required!');
}
if (_.isUndefined(req.param('last'))) {
return res.badRequest('A last name is required!');
}
if (_.isUndefined(req.param('phone'))) {
return res.badRequest('A phone number is required!');
}
if (_.isUndefined(req.param('email'))) {
return res.badRequest('An email address is required!');
}
if (req.param('email') !== req.param('emailConfirm')) {
return res.badRequest('Email addresses do not match!');
}
if (_.isUndefined(req.param('password'))) {
return res.badRequest('A password is required!');
}
if (req.param('password').length < 6) {
return res.badRequest('Password must be at least 6 characters!');
}
if (req.param('password') !== req.param('confirmPassword')) {
return res.badRequest('Passwords do not match!');
}
if (_.isUndefined(req.param('tos'))) {
return res.badRequest('You must review and accept the Goknack Terms of Service & Privacy policy.');
}
Emailaddresses.validate({
string: req.param('email'),
}).exec({
// An unexpected error occurred.
error: function (err) {
return res.serverError(err);
},
// The provided string is not an email address.
invalid: function() {
return res.badRequest('Doesn\'t look like an email address to me!');
},
// OK.
success: function() {
Passwords.encryptPassword({
password: req.param('password'),
}).exec({
error: function (err) {
return res.serverError(err);
},
success: function (result) {
var options = {};
// gravitar image for user, if present
try {
options.gravatarURL = Gravatar.getImageUrl({
emailAddress: req.param('email')
}).execSync();
} catch (err) {
return res.serverError(err);
}
options.email = req.param('email');
options.username = req.param('username');
options.encryptedPassword = result;
options.deleted = false;
options.deletedDate = '';
options.admin = false;
options.banned = false;
options.paypalEmail = '';
// validate that email address has not been used before
User.find({email: req.param('email')}).exec(function(err, user) {
if (err) {
return res.negotiate(err);
}
if (user.length > 0) {
return res.badRequest('Invalid email, this email address is already in use.');
} else {
// create new user
User.create(options).exec(function (err, createdUser) {
if (err) {
console.log('the error is: ', err.invalidAttributes);
return res.negotiate(err);
}
// Log the user in
console.log(createdUser);
req.session.userId = createdUser._id;
// NOTHING IS BEING RETURNED IN createdUser
return res.json(createdUser);
});
}
});
}
});
}
});
},
您可以在@arbuthnott清除User.find()语法问题之后重新编写您的问题。我觉得我现在不能遵循你的问题的主要依据。想帮助你解决这个问题。我是一个很大的SailsJS支持者 –
Hi Zach,重新修改了这个问题,使我更清楚当我尝试创建一个新用户然后返回该对象时发生了什么。 find()方法的更新也已经被应用。 你会看到在注册方法的最后,我试图设置用户ID req.session.userId与一个简单的console.log()没有运气。 – xXPhenom22Xx
添加了一些关于注册功能的更多评论,欣赏帮助 – xXPhenom22Xx