私はReactJS + ReduxプロジェクトにMongoDB/Webpack/NodeJS Expressを設定しました。ReactJS + Redux:MongoDBは正しいAPIリクエストでもデータベースにデータを保存しないのはなぜですか?
私は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コントローラは、このようなとして設定されている: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')
}
構成:
module.exports = {
'database': 'mongodb://localhost/practicedb',
'port': process.env.PORT || 3000,
'secret': 'dogcat',
}
これまでのところ、プロジェクトには電子メールアドレスを受け付ける入力テキストフィールドがあります。電子メールがすでに登録されている場合は、APIはエラーThat email address is already in use.
を返し、それが有効になります。
だから私は、問題が何であるかを確認するためにコンソールロギングを試みたが、私はPOSTリクエストを送信する最初の時間は、それが(APIのコンソールログを示す端子)以下を記録します。
そして、もし私はそれが電子メールが422エラーですでに使用中であることを私にAPIのエラーをスローし、再び同じ電子メールを提出しようとすると、まだデータが保存されませんデータベース(practicedb
)作成されません飽きない:
また、端末に表示されるOPTIONS
リクエストは何ですか?私はPOST
にしようとしました。最後に、OPTIONS
なぜERROR
ログインAPIサーバが時系列にログインしていないのですか?
EDIT
@Jacobねえジェイコブ!私を見ている心。ありがとう –
データベースは実行中ですか?異なる場所に2つのデータベースインスタンスがありますか? – sailens
@sailensもう一度登録して、ターミナルから自分のデータベースをチェックしましたが、私が格納する新しいレジスタデータを定義した 'practicedb'ではなく' test'データベースしか表示しませんでした。複数のデータベースインスタンスが実行されているかどうかを確認する方法はありますか? –