[英]Why isn't .save for Mongoose working in ReactJS?
我有一個ReactJS和Redux連接MongoDB,Mongoose。
我有一個Mongoose Schema(user.js)設置如下:
var UserSchema = new Schema({
email: {
type: String,
lowercase: true,
unique: true,
required: true
},
})
並且接收電子郵件字符串請求的API控制器,然后如果在文本字段中沒有輸入,則發送422錯誤,並且在User.findOne
,如果電子郵件已經存在於數據庫中,則它拋出422錯誤並且如果沒有, user.save
是否將其保存在數據庫中。
"use strict";
const User = require('../models/user')
exports.register = function(req, res, next) {
const email = req.body.email;
console.log('ERROR 1')
if(!email) {
return res.status(422).send({ error: 'You must enter an email address.'})
console.log('ERROR 1')
}
User.findOne({ email: email }, function(err, existingUser) {
if(err) { return next(err); }
console.log('ERROR 2')
if(existingUser) {
return res.status(422).send({ error: 'That email address is already in use.'})
}
console.log('ERROR 3')
let user = new User({
email: email,
})
console.log('ERROR 4')
user.save(function(err, user) {
if(err) { return next(err); }
console.log('ERROR 5')
res.status(201).json({
user: user,
})
})
})
console.log('ERROR 6')
}
而我正在發出一個POST請求:
export function registerUser({ email }) {
return function(dispatch) {
axios.post(`${API_URL}/auth/register`, { email })
.then(response => {
console.log('THIS IS TESTING PURPOSE')
console.log(response)
dispatch({ type: AUTH_USER });
})
.catch((error) => {
errorHandler(dispatch, error.response, AUTH_ERROR)
});
}
}
我發出了幾個POST請求,並且所有狀態都從使用服務器配置的API恢復成功: {'database': 'mongodb://localhost/practicedb', 'port': process.env.PORT || 3000}
{'database': 'mongodb://localhost/practicedb', 'port': process.env.PORT || 3000}
,但數據永遠不會被保存,數據庫(practb)不會顯示在終端上。
一切似乎都設置正確,但為什么問題? 我可以錯過一些東西嗎? 任何見解或指導都會非常感激。
先感謝您!
以下是一些日志以及我從未做過的OPTIONS請求:
如果我錯了,你的裸保存方法不是異步,請更正。 Save方法返回一個promise。 請參見http://mongoosejs.com/docs/promises.html
編輯
user.save().then(function(doc) {
if (!doc) { next(new Error('Error while persisting!')); }
console.log('ERROR 5');
res.status(201).json({
user: doc
});
});
您也可以使用任何承諾的庫( Q , bluebird )或使用ES6 Promise來實現此目的。 或者使用異步。
Q的例子。 未經測試 :
"use strict";
const User = require('../models/user');
const Q = require('Q'); //add https://github.com/kriskowal/q
exports.register = function(req, res, next) {
const email = req.body.email;
console.log('ERROR 1')
if(!email) {
return res.status(422).send({ error: 'You must enter an email address.'})
console.log('ERROR 1')
}
var deferred = Q.defer();
User.findOne({ email: email }, function(err, existingUser) {
if(err) { return next(err); }
console.log('ERROR 2')
if(existingUser) {
return res.status(422).send({ error: 'That email address is already in use.'})
}
console.log('ERROR 3')
let user = new User({
email: email,
})
console.log('ERROR 4')
user.save(function(err, user) {
if(err) {
deferred.reject(err);
return next(err);
}
console.log('ERROR 5')
deferred.resolve(user); //
});
res.status(201).json({
user: deferred.promise,
})
})
console.log('ERROR 6')
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.