Node.js Mongoose.save()未保存到数据库?

Node.js Mongoose.save()未保存到数据库?,node.js,mongodb,express,reactjs,mongoose,Node.js,Mongodb,Express,Reactjs,Mongoose,我对猫鼬有问题。保存方法。数据库永远不会被创建,数据也不会被保存,也不会抛出任何错误。我已经用尽谷歌和stackoverflow来寻找类似的建议,但运气不好,所以把它交给任何能帮助我的人 我的发帖请求是通过: export function registerUser({ email }) { return function(dispatch) { axios.post(`${API_URL}/auth/register`, { email }) .then(response

我对猫鼬有问题。保存方法。数据库永远不会被创建,数据也不会被保存,也不会抛出任何错误。我已经用尽谷歌和stackoverflow来寻找类似的建议,但运气不好,所以把它交给任何能帮助我的人

我的发帖请求是通过:

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)
    });
  }
}
var UserSchema = new Schema({
  email: {
    type: String,
    lowercase: true,
    unique: true,
    required: true
  },
})
我发出了几个POST请求,所有请求都通过sever config:
{'database':'mongodb://localhost/practicedb“,“端口”:process.env.port | | 3000}
,但数据从未保存,数据库(practicedb)也没有显示在终端上

使用Mongoose模式(user.js):

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)
    });
  }
}
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


我遇到了类似的问题,因为我没有查看数据库中的正确位置,所以项目没有显示出来。您确定已连接到mongodb数据库吗。Mongoose有时会执行操作缓冲。尝试以下操作以确保您已连接:

var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function() {
  // we're connected!
});

// from mongoose docs. 

有关操作缓冲的更多详细信息:

我花了4个小时试图找出.save()无法工作的原因。原来我的家庭IP地址已更改,无法访问数据库。啊

无论如何。。。以下是我诊断问题的方法:

Do
console.log(mongoose.connection.readyState)

该代码将返回数据库状态。如果它返回
1
,则表示您已连接。如果它返回
0
,则表示您未连接

如果它返回
0
,您可以尝试将您的IP地址列入白名单(假设您使用的是MongoDB Atlas):

  • 转到您的MongoDB Atlas仪表板
  • 转到安全下的
    网络访问
  • 点击添加IP地址
  • 添加您当前的IP地址

  • 您的user.js是否已完成?当您声明mongoose模式并返回模型时?@LucasCosta抱歉,但您能澄清什么是完整的吗?@LucasCosta抱歉,但您将谁称为“他们”?在
    user.save(function(err,user){
    之后,您可以执行console.log查看回调中发送的内容吗,例如:
    console.log(err,user)
    @RandomUser按照建议尝试了console.log(err,user),它记录了
    null{uu v:0,email:'testemail@test.com“,_id:57d2eea0d739b312704d0491}
    有线索吗?