【发布时间】:2017-01-16 22:52:32
【问题描述】:
我遇到了 Mongoose .save 方法的问题。永远不会创建数据库,也不会保存数据,也不会引发任何错误。我已经用尽了谷歌和 stackoverflow 来寻找类似的建议,但没有运气,所以把它开放给任何可以帮助我的人!
我的 POST 请求是通过以下方式发出的:
export function registerUser({ email }) {
return function(dispatch) {
axios.post(`${API_URL}/auth/register`, { email })
.then(response => {
dispatch({ type: AUTH_USER });
})
.catch((error) => {
errorHandler(dispatch, error.response, AUTH_ERROR)
});
}
}
我发出了几个 POST 请求,所有请求都从 API 返回成功状态,服务器配置为:{'database': 'mongodb://localhost/practicedb', 'port': process.env.PORT || 3000},但数据从未保存,数据库 (practicedb) 未显示在终端上。
使用 Mongoose 架构 (user.js):
var UserSchema = new Schema({
email: {
type: String,
lowercase: true,
unique: true,
required: true
},
})
API 控制器
接收到邮件字符串POST请求,然后如果在文本字段中没有输入,则返回422错误,在User.findOne内,如果数据库中已经存在邮件,则抛出422错误如果没有,user.save 是否将其保存在数据库中。但是 .save 不能正常工作,甚至没有创建数据库。
"use strict";
const User = require('../models/user')
exports.register = function(req, res, next) {
const email = req.body.email;
if(!email) {
return res.status(422).send({ error: 'You must enter an email address.'})
}
User.findOne({ email: email }, function(err, existingUser) {
if(err) { return next(err); }
if(existingUser) {
return res.status(422).send({ error: 'That email address is already in use.'})
}
let user = new User({
email: email,
})
user.save(function(err, user) {
if(err) { return next(err); }
res.status(201).json({
user: user,
})
})
})
}
编辑
我为 API 控制器尝试了更广泛的控制台日志记录,一旦触发,它看起来好像什么都不执行并跳到最后,但随后它又恢复并进入了 User.findOne 和 user.save,然而看起来 user.save 不起作用。
会不会是服务器没有正确连接到数据库?有没有办法确定是否使用了 MongoDB 方法?
也尝试过快速日志记录:
这是服务器的设置方式:
const express = require('express'),
app = express(),
logger = require('morgan'),
config = require('./config/main'),
mongoose = require('mongoose'),
bodyParser = require('body-parser'),
router = require('./router');
mongoose.Promise = global.Promise;
mongoose.connect(config.database);
const server = app.listen(config.port);
console.log('Your server is running on port ' + config.port + '.');
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
app.use(logger('dev'));
app.use(function(req, res, next) {
res.header("Access-Control-Allow-Origin", "http://localhost:8080");
res.header('Access-Control-Allow-Methods', 'PUT, GET, POST, DELETE, OPTIONS');
res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept, Authorization, Access-Control-Allow-Credentials");
res.header("Access-Control-Allow-Credentials", "true");
next();
})
router(app);
编辑 2
【问题讨论】:
-
你的 user.js 是完整的吗?当你声明一个猫鼬模式并返回一个模型?
-
@LucasCosta 抱歉,您能澄清一下什么是完整的吗?
-
@LucasCosta 抱歉,你指的是“他们”是谁?
-
user.save(function(err, user) {之后可以做console.log 看看回调中发送了什么,例如:console.log(err, user); -
@RandomUser 按照建议尝试了 console.log(err,user) 并记录了
null { __v: 0, email: 'testemail@test.com', _id: 57d2eea0d739b312704d0491 }任何线索?
标签: node.js mongodb express reactjs mongoose