ReactJS + Redux:为什么 MongoDB 即使有正确的 API 请求也没有将数据保存到数据库?

ReactJS + Redux: Why isn't MongoDB saving data to the database even with correct API requests?

我在我的 ReactJS + Redux 项目中设置了 MongoDB/Webpack/NodeJS Express。

我正在从 redux 中的动作创建者发出 API 调用,并到达 API 服务器并返回成功状态,但数据永远不会保存,即使检查也永远不会创建数据库在终端 mongo -> dbs 中,它不显示我将其命名为 practicedb 的数据库。

可能是什么问题?我错过了什么吗?

任何指导或见解将不胜感激。谢谢

这是我为 API 设置的:

import axios from 'axios';
import { browserHistory } from 'react-router';
import cookie from 'react-cookie';
import { AUTH_USER, AUTH_ERROR } from './types';

const API_URL = 'http://localhost:3000/api';

export function errorHandler(dispatch, error, type) {
  let errorMessage = (error.data.error) ? error.data.error : error.data;

   // NOT AUTHENTICATED ERROR
   if(error.status === 401) {
     errorMessage = 'You are not authorized to do this.';
   }

  dispatch({
    type: type,
    payload: errorMessage
  });
}

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

我的 API 控制器是这样设置的:

"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')
}

API 的配置:

module.exports = {
  'database': 'mongodb://localhost/practicedb',
  'port': process.env.PORT || 3000,
  'secret': 'dogcat',
}

到目前为止,该项目只有一个输入文本字段,它接受电子邮件地址。如果电子邮件已经被注册,API 应该 return 错误 That email address is already in use. 并且确实如此。

所以我尝试了控制台日志记录来查看问题所在,我第一次提交 POST 请求时,它记录了以下内容(终端显示 API 控制台日志):

如果我尝试再次提交同一封电子邮件,它会抛出 API 错误,即该电子邮件已在使用中并出现 422 错误,但数据未保存且数据库 (practicedb) 永远不会被创建:

此外,终端中显示的 OPTIONS 请求是什么?我只尝试 POST。最后,就是OPTIONS为什么ERROR登录API服务器没有按时间顺序登录?

编辑

您使用了错误的 Mongo shell 命令:db 只会显示当前数据库 (test),但如果您想查看所有数据库的列表,你应该使用 show dbs.

如果要切换数据库:

use practicedb

并且,如果您想查看当前数据库中的集合:

show collections