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
我在我的 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