express сообщение сервера не работает на герою, но работает на локальном сервере - PullRequest
0 голосов
/ 20 февраля 2020

Надеюсь, у вас все хорошо, я сделал веб-сервер с express js, и он отлично работает на моем локальном сервере. на самом деле я не сделал это с нуля, я вытащил его из "https://github.com/jm-shi/MERN-Social-Network" и изменил некоторые вещи в соответствии с моими потребностями. Затем я развернул его на Heroku, и теперь он не работает нормально. он отображает домашнюю страницу, но API не работает, либо получить, либо отправить.

const bodyParser = require('body-parser');
const express = require('express');
const logger = require('morgan');
const mongoose = require('mongoose');
const path = require('path');
const posts = require('./routes/postRoute');
const users = require('./routes/userRoute');
const dbURI = process.env.REACT_APP_DB_URI || require('./secrets').dbURI;

const app = express();
const port = process.env.PORT || 5000;

// Enable CORS
app.use((req, res, next) => {
  res.header('Access-Control-Allow-Origin', '*');
  res.header(
 'Access-Control-Allow-Headers',
 'Origin, X-Requested-With, Content-Type, Accept, Authorization'
);
if (req.method === 'OPTIONS') {
res.header('Access-Control-Allow-Methods', 'PUT, GET, POST, PATCH, DELETE');
return res.status(200).json({});
}
return next();
});

mongoose
  .connect(dbURI, {
   useNewUrlParser: true,
   useUnifiedTopology: true,
   useCreateIndex: true
  })
 .then(() => console.log('Connected to MongoDB'))
 .catch(err => console.log('Failed to connect to MongoDB', err));

 app.use(bodyParser.json());
 app.use(bodyParser.urlencoded({ extended: true }));
 app.use(logger('dev'));
 app.use('/posts', posts);
 app.use('/users', users);
 // app.use(express.static(path.resolve(__dirname, '.', 'client', 'build')));
 // if (process.env.NODE_ENV === 'production') {
 //   app.get('*', (req, res) => {
 //     res.sendFile(path.resolve(__dirname, '.', 'client', 'build', 'index.html'));
 //   });
 // }
 if (process.env.NODE_ENV === 'production') {
 //set static folder
  app.use(express.static('client/build')); 
  }
 app.get('*', (req, res) => {
  res.sendFile(path.resolve(__dirname, 'client', 'build', 'index.html'));
 });
 app.listen(port, () => {
  console.log(`Started up at port ${port}`);
 });

это маршрут публикации

    const express = require('express');
    // const { ObjectID } = require('mongodb');
    const Post = require('../models/postModel');

    const router = new express.Router();

    router.get('/memories', async (req, res) => {
      const posts = await Post.find().sort({ timestamp: -1 });
      res.status(200).json(posts);
    });

    router.post('/memories', async (req, res) => {
      const newPost = new Post({
        title: req.body.title,
        body: req.body.body,
        createdAt: new Date().getTime()
      });
      try {
        const post = await newPost.save();
        return res.status(201).json(post);
      } catch (err) {
        return res.status(400).send(err);
      }
    });

    router.post('/update', async (req, res) => {
      Post.findById(req.body._id, (err, obj) => {
        // res.send(obj);
        obj.title = req.body.title;
        obj.body = req.body.body;
        obj.save((error, newObj) => {
          if (error) {
            res.send(error);
          } else {
            res.send(newObj);
          }
        });
      });
    });

    router.delete('/:id', async (req, res) => {
      try {
        const post = await Post.findById(req.params.id);
        await post.remove();
        return res.json({ success: true });
      } catch (err) {
        return res.status(404).send(err);
      }
    });

    module.exports = router;

здесь маршрут пользователя

    const bcrypt = require('bcrypt');
    const express = require('express');
    const jwt = require('jsonwebtoken');
    const validateLogin = require('../validation/validateLogin');
    const validateSignup = require('../validation/validateSignup');
    const User = require('../models/userModel');

    const router = new express.Router();


    router.get('/logout', (req, res) => {
      delete req.session.authStatus;
      res.send([
        'You are now logged out.',
        '<br/>',
        '<a href="./secure">Return to the secure page. You will have to log in again.</a>'
      ].join(''));
    });

    // Sign up a user
    router.post('/signup', async (req, res) => {
      const { errors, isValid } = validateSignup(req.body);

      if (!isValid) {
        return res.status(400).json(errors);
      }

      try {
        const user = await User.find({ email: req.body.email }).exec();
        if (user.length > 0) {
          return res.status(409).json({ error: 'Email already exists.' });
        }
        return bcrypt.hash(req.body.password, 10, (error, hash) => {
          if (error) {
            return res.status(500).json({ error });
          }
          const newUser = new User({
            firstname: req.body.firstname,
            createdAt: new Date().getTime(),
            email: req.body.email,
            username: req.body.username,
            lastname: req.body.lastname,
            gender: req.body.gender,
            password: hash
          });
          return newUser
            .save()
            .then((result) => {
              res.status(201).json({ user: result._id });
            })
            .catch((err) => {
              res.status(500).json({ error: err });
            });
        });
      } catch (err) {
        return res.status(500).json({ err });
      }
    });

    // Log in a user
    router.post('/login', async (req, res) => {
      const { errors, isValid } = validateLogin(req.body);

      if (!isValid) {
        return res.status(400).json(errors);
      }

      try {
        const user = await User.findOne({ email: req.body.email }).exec();
        if (!user) {
          return res.status(401).json({
            email: 'Could not find email.'
          });
        }

        return bcrypt.compare(req.body.password, user.password, (err, result) => {
          if (err) {
            return res.status(401).json({
              message: 'Auth failed.'
            });
          }
          if (result) {
            const token = jwt.sign(
              {
                avatarColor: user.avatarColor,
                createdAt: user.createdAt,
                name: user.name,
                email: user.email,
                showEmail: user.showEmail,
                userId: user._id
              },
              process.env.REACT_APP_JWT_KEY || require('../secrets').jwtKey,
              {
                expiresIn: '1h'
              }
            );
            return res.status(200).json({
              message: 'Auth successful.',
              token
            });
          }
          return res.status(401).json({
            password: 'Wrong password. Try again.'
          });
        });
      } catch (err) {
        return res.status(500).json({ message: err });
      }
    });

    // Delete a user
    router.delete('/:id', async (req, res) => {
      try {
        await User.remove({ _id: req.params.id }).exec();
        res.status(200).json({ message: 'Successfully deleted user.' });
      } catch (err) {
        res.status(500).json({ message: err });
      }
    });

    module.exports = router;

но только сборка осуществляется через * route и другие API не работают ... любезно сообщите мне, если есть какие-либо проблемы с самим сервером или чем-то еще ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...