2016-09-07 2 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으로 만 시도했다. 마지막으로, OPTIONSERROR 로그인 API 서버가 연대순으로 로그인하지 않는 이유는 무엇입니까?

편집

enter image description here

+0

@Jacob 야 야곱을! 나를 돌봐주는 마음. 감사합니다 –

+0

데이터베이스가 실행 중입니까? 다른 위치에 2 개의 데이터베이스 인스턴스가 있습니까? – sailens

+0

@sailens 다시 등록하고 터미널을 통해 내 데이터베이스를 검사했지만, 저장 될 새 레지스터 데이터를 정의한'practicedb '보다는'test' 데이터베이스 만 보여줍니다. 그리고 나는'test' 데이터베이스를 만들지 않았습니다. 여러 데이터베이스 인스턴스가 실행 중인지 확인하는 방법이 있습니까? –

답변

6
당신은 잘못된 몽고 쉘 명령을 사용하고

: db는 당신에게 현재 데이터베이스 (test)를 보여,하지만 것입니다 당신이 모든 데이터베이스의 목록을보고 싶다면, show dbs을 사용해야합니다.

당신이 데이터베이스를 전환하려면 :

use practicedb 

을 그리고, 현재 데이터베이스의 컬렉션을보고 싶다면 :

show collections 
+0

로버트 감사합니다! 22 시간 만에 현상금을 수여 할 수 있다고합니다. 나는 그것으로 돌아갈 것이다! –