Не могу получить ответ от моего сервера.Зачем? - PullRequest
0 голосов
/ 29 марта 2019

Я не могу получить ответ от своего сервера.Я использую почтальон и запускаю следующий почтовый запрос:

localhost:4000/users/register?email=test@gmail.com&f_name=testf&s_name=tests&password=test

Он очень долго зависает и затем говорит:

Could not get any response

Это мой код:

[user.route.js]
const express = require('express');
const userRoutes = express.Router();
const cors = require('cors');
const bcrypt = require('bcryptjs');
const jwt = require('jsonwebtoken');

//require User model in the routes module
let User = require('../models/user.model.js');

//Make router use cors to avoid cross origin errors
userRoutes.use(cors);

//secret
process.env.SECRET_KEY = 'secret';

//define register route
userRoutes.post('/register', (req, res) => {
  const today = new Date();
  const userData = {
    email: req.body.email,
    f_name: req.body.f_name,
    s_name: req.body.s_name,
    password: req.body.password,
    created: today
  }
  //Find one user based on email, hash their password and then create a document in the collection for that user
  User.findOne({
      email: req.body.email
    })
    .then(user => {
      if (!user) {
        bcrypt.hash(req.body.password, 10, (err, hash) => {
          user.password = hash;
          User.create(userData)
            .then(user => {
              res.json({
                status: user.email + ' registered'
              });
            })
            .catch(err => {
              res.send('error: ' + err);
            });
        });
      }
    });
});

userRoutes.post('/login', (req, res) => {
  User.findOne({
      email: req.body.email
    })
    .then(user => {
      if (user) {
        if (bcrypt.compareSync(req.body.password, user.password)) {
          const payload = {
            _id: user._id,
            f_name: user.f_name,
            s_name: user.s_name,
            email: user.email
          }
          let token = jwt.sign(payload, process.env.SECRET_KEY, {
            expiresIn: 1440
          });
          res.send(token);
        } else {
          res.json({
            'Error': 'Password Incorrect'
          });
        }
      } else {
        res.json({
          'Error': 'User does not exist'
        });
      }
    })
    .catch(err => {
      res.send('Error: ' + err);
    });
});

module.exports = userRoutes;

[user.model.js]
const mongoose = require('mongoose');
const Schema = mongoose.Schema;

let User = new Schema({
  email: {
    type: String
  },
  f_name: {
    type: String
  },
  s_name: {
    type: String
  },
  password: {
    type: String
  },
  created: {
    type: String
  }
}, {
  collection: 'users'
});

[server.js]
const express = require('express');
const app = express();
const bodyParser = require('body-parser');
const PORT = 4000;
const cors = require('cors');
const mongoose = require('mongoose');
const config = require('./db.js');

mongoose.Promise = global.Promise;
mongoose.connect(config.DB, {
  useNewUrlParser: true
}).then(
  () => {
    console.log('Database is connected')
  },
  err => {
    console.log('Can not connect to the database' + err)
  }
);

app.use(cors());
app.use(bodyParser.urlencoded({
  extended: true
}));
app.use(bodyParser.json());

var Users = require('./routes/user.route');

//make /users use routes
app.use('/users', Users);

app.listen(PORT, function() {
  console.log('Server is running on Port:', PORT);
});

[db.js]
module.exports = {
  DB: 'mongodb://localhost:27017/pharaohcrud'
}

Я использую Node, MongoDB, Mongoose, Vue, Express.

Я новичок в Node в целом, поэтому мне сложно подробно рассказать о том, что я сделал.Пожалуйста, не стесняйтесь задавать любые вопросы, на которые вам нужно ответить, чтобы помочь мне с проблемой и дурным ответом как можно тщательнее:)

РЕДАКТИРОВАТЬ:

Вот обновленный файл db.js

module.exports = {
  DB: 'mongodb://localhost:27017/pharaoh'
}

Вот обновленный почтовый запрос, который я отправляю на сервер через почтальона:

localhost:4000/users/register

[raw json request]
{
    "email": "test@gmail.com",
    "f_name": "test",
    "s_name": "test",
    "password": "test"
}

Ответы [ 2 ]

0 голосов
/ 30 марта 2019

Я удалил весь код, связанный с базой данных, и набрал его заново, и теперь он работает. Полагаю, урок здесь заключается в том, чтобы всегда быть внимательным при наборе кода, чтобы убедиться, что вы пишете его правильно.

0 голосов
/ 29 марта 2019

Вы должны отправить данные json с вашим запросом на публикацию, а не строкой запроса.

В почтальоне выберите вкладку «Тело» и выберите «сырой», а в раскрывающемся меню выберите формат «json». Отправьте ваши пользовательские данные как Json, это решит проблему.

Описание изображения здесь

...