Ich habe eine Funktion in meinem Sails 1.0-Anwendung, die einen neuen Benutzer mit dem MongoDB fügt und dann am Ende zurückkehren soll das User-Objekt als JSON zurückgeben ...Sails.JS - Erstellt Benutzer wont Benutzerobjekt
Die Der Benutzer wird zur Sammlung hinzugefügt, aber beim Versuch, die _id des neuen Benutzerobjekts abzurufen, wird ein Fehler ausgegeben. Wenn ich versuche, console.log() zu erstellen, kommt der createdUser als Undefined zurück. Versuchen Sie herauszufinden, wie der Benutzer in Mongo erstellt werden kann, aber nicht als Objekt in derselben Funktion zurückgegeben wird?
kurz im Register() Funktion führt Folgendes aus:
- Dieser Test prüft einige Eingänge
- Checks für gültige E-Mail-Adresse
- Passwort Verschlüsselt
- Findet Gravatar URL ggf.
- Einsätze Benutzer in Sammlung
- Setzen Sie user._id in req.session (FEHLER BEFINDET SICH HIER)
- Return User-Objekt als JSON
Fehler:
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
^
ich versucht habe ID _id Schalt da es Mongo ist aber kein Glück, wenn ich versuche, createdUser zu console.log es ist nicht definiert .
Der Datensatz wird in der Datenbank erstellt ... Jede Hilfe auf, wo ich vielleicht vermasseln würde geschätzt werden.
Die volle Register Funktion Ich verwende:
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);
});
}
});
}
});
}
});
},
Könnten Sie bitte Ihre Frage ein wenig nachschreiben, nachdem @arbuthnott das User.find() - Syntaxproblem gelöst hat. Ich fühle mich, als ob ich jetzt nicht dem Hauptgedanken Ihrer Frage folgen kann. Ich möchte dir helfen, dieses Ding zu lösen. Ich bin ein großer SailsJS-Unterstützer –
Hi Zach, formulierte die Frage ein wenig um, um es deutlicher zu machen, was passiert, wenn ich versuche, einen neuen Benutzer zu erstellen und dann dieses Objekt zurückzugeben. Die Updates für die Methode find() wurden ebenfalls bereits angewendet. Sie werden sehen, am Ende der Register-Methode Ich versuche, die Benutzer-ID zu req.session.userId zusammen mit einer einfachen console.log() ohne Glück zu setzen. – xXPhenom22Xx
Ein paar weitere Kommentare dazu, was die Register-Funktion macht, schätze die Hilfe – xXPhenom22Xx