2016-09-07 6 views
8

私は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のコンソールログを示す端子)以下を記録します。

enter image description here

そして、もし私はそれが電子メールが422エラーですでに使用中であることを私にAPIのエラーをスローし、再び同じ電子メールを提出しようとすると、まだデータが保存されませんデータベース(practicedb)作成されません飽きない:

enter image description here

また、端末に表示されるOPTIONSリクエストは何ですか?私はPOSTにしようとしました。最後に、OPTIONSなぜERRORログインAPIサーバが時系列にログインしていないのですか?

EDIT

enter image description here

+0

@Jacobねえジェイコブ!私を見ている心。ありがとう –

+0

データベースは実行中ですか?異なる場所に2つのデータベースインスタンスがありますか? – sailens

+0

@sailensもう一度登録して、ターミナルから自分のデータベースをチェックしましたが、私が格納する新しいレジスタデータを定義した 'practicedb'ではなく' test'データベースしか表示しませんでした。複数のデータベースインスタンスが実行されているかどうかを確認する方法はありますか? –

答えて

6

あなたは間違ったモンゴシェルコマンドを使用している:dbだけであなたの現在のデータベース(test)が表示されますが、あなたはすべてのデータベースのリストを見たい場合は、 show dbsを使用してください。

あなたがデータベースを切り替えたい場合は、次の

use practicedb 

そして、あなたは現在のデータベース内のコレクションを見たい場合:

show collections 
+0

ロバートありがとう!私は22時間で私の賞金を授与するかもしれないと言います。私はそれに取り掛かるだろう! –

関連する問題