Http ответ не отправлен в цепочку обещаний - PullRequest
0 голосов
/ 06 октября 2019

В приведенном ниже коде я не получаю ответ HTTP на лицевой стороне, хотя метод updateOne фактически обновляет данные в базе данных, и на консоли отображается сообщение «Hello there». Я явно что-то упускаю, но кто-то может указать мне на это?

Кроме того, в целом, я не уверен, что цепочка then, как это, является хорошей практикой. Это нормально?

exports.updateUserProfile = (req, res) => {
  const userId = req.body.id;
  const password = req.body.password;
  const newIds = req.body.newIds;

  userService.isPasswordValid(userId, password)
    .then(
      isValid => {
        if (isValid) {
          return isValid;
        } else {
          return res.status(401).json({
            message: 'Invalid password.'
          });
        }
      })
    .then(
      () => {
        return userService.getFieldsToUpdate(newIds);
      })
    .then(
      update => {
        console.log('update: ', update);
        return User.updateOne(
          { _id: userId },
          update
        );
      })
    .then(
      () => {
        res.status(200).json({
          message: 'User profile successfully updated.'
        });
        console.log('hello there!');
      })
    .catch(
      err => {
        return res.status(400).end({
          message: err
        });
      }
    );
}

Я вызываю этот метод в следующем маршрутизаторе

const express = require('express');
const router = express.Router();
const auth = require('../middlewares/auth');

const userCtrl = require('../controllers/user');

router.post('/signup', userCtrl.signup);
router.post('/login', userCtrl.login);
router.put('/updateProfile', auth, userCtrl.updateUserProfile);
router.get('/myprofile', auth, userCtrl.myProfile);

module.exports = router;

, который, в свою очередь, вызывается в

const express = require('express');
const bodyParser = require('body-parser');
const mongoose = require('mongoose');

const app = express();

const userRoute = require('./routes/user');

mongoose.connect('...', { useNewUrlParser: true })
  .then(() => {
    console.log('Successfully connected to MongoDB Atlas!');
  })
  .catch((err) => {
    console.log('Unable to connect to MongoDB Atlas');
    console.error(err);
  });

app.use(bodyParser.json());

app.use((req, res, next) => {
  res.setHeader('Access-Control-Allow-Origin', '*');
  res.setHeader('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content, Accept, Content-Type, Authorization');
  res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, PATCH, OPTIONS');
  next();
});

app.use('/', userRoute);
app.use('/signup', userRoute);
app.use('/login', userRoute);
app.use('/myprofile', userRoute);
app.use('/changePassword', userRoute)

module.exports = app;
...