首页 > 解决方案 > 在 Heroku 上部署后,我的反应节点应用程序未从后端读取数据

问题描述

我能够在本地运行我的项目而没有任何错误,但在 heroku 上它卡在初始登录/注册页面上。我认为这是因为它不与后端交互而只显示前端。

这是我的项目结构的样子,

项目结构

我的根文件夹的 package.json 的内容,它是反应前端

前端/package.json

{
  "name": "cook-it",
  "version": "0.1.0",
  "private": true,
  "dependencies": {
    "@apollo/react-hooks": "4.0.0",
    "@material-ui/core": "4.11.3",
    "@material-ui/lab": "4.0.0-alpha.57",
    "@testing-library/jest-dom": "5.11.9",
    "@testing-library/react": "11.2.5",
    "@testing-library/user-event": "12.8.0",
    "add": "2.0.6",
    "antd": "4.15.0",
    "apollo-cache-inmemory": "1.6.6",
    "apollo-client": "2.6.10",
    "apollo-link-context": "1.0.20",
    "apollo-link-http": "1.5.17",
    "firebase": "8.3.1",
    "graphql": "15.5.0",
    "graphql-tag": "2.11.0",
    "jwt-decode": "3.1.2",
    "react": "17.0.1",
    "react-bootstrap": "1.5.1",
    "react-dom": "17.0.1",
    "react-router-dom": "5.2.0",
    "react-scripts": "4.0.3",
    "semantic-ui-css": "2.4.1",
    "semantic-ui-react": "2.0.3",
    "web-vitals": "1.1.0",
    "yarn": "^1.22.10"
  },
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject"
  },
  "eslintConfig": {
    "extends": [
      "react-app",
      "react-app/jest"
    ]
  },
  "browserslist": {
    "production": [
      ">0.2%",
      "not dead",
      "not op_mini all"
    ],
    "development": [
      "last 1 chrome version",
      "last 1 firefox version",
      "last 1 safari version"
    ]
  }
}

前端/src/index.js

import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './components/App';
import 'antd/dist/antd.css';
import { ApolloProvider } from '@apollo/react-hooks';
import ApolloClient from 'apollo-client';
import { InMemoryCache } from 'apollo-cache-inmemory';
import { createHttpLink } from 'apollo-link-http';
import { setContext } from 'apollo-link-context';
import { AuthProvider } from './context/auth';
import 'semantic-ui-css/semantic.min.css'
const httpLink = createHttpLink({
    uri: 'http://localhost:5000/'
});

const authLink = setContext(() => {
    const token = localStorage.getItem('jwtToken');
    return {
        headers: {
            Authorization: token ? `Bearer ${token}` : ''
        }
    };
});

const client = new ApolloClient({
    link: authLink.concat(httpLink),
    cache: new InMemoryCache()
});




ReactDOM.render(

    <ApolloProvider client={client}>
        <AuthProvider>
            <App />
        </AuthProvider>
    </ApolloProvider>,
    document.getElementById('root')
);

前端/后端/package.json

{
  "name": "merng",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "serve": "nodemon index",
    "start": "node index"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "apollo-server": "^2.24.0",
    "bcryptjs": "^2.4.3",
    "csvtojson": "^2.0.10",
    "graphql": "^14.3.1",
    "jsonwebtoken": "^8.5.1",
    "mongoose": "^5.12.7",
    "react-router-dom": "^5.0.1",
    "semantic-ui-css": "^2.4.1",
    "semantic-ui-react": "^0.87.2"
  },
  "devDependencies": {
    "nodemon": "^1.19.1"
  }
}

前端/后端/index.js

const { ApolloServer } = require('apollo-server');
const mongoose = require('mongoose');

const typeDefs = require('./graphql/typeDefs');
const resolvers = require('./graphql/resolvers');
const { MONGODB } = require('./config.js');

const ports = process.env.PORT || 5000
const server = new ApolloServer({
  typeDefs,
  resolvers,
  context: ({ req }) => ({ req })
});

mongoose
  .connect(MONGODB, { useNewUrlParser: true,useUnifiedTopology: true })
  .then(() => {
    console.log('MongoDB Connected');
    return server.listen({ port: ports });
  })
  .then((res) => {
    console.log(`Server running at ${res.url}`);
  });

标签: node.jsreactjsheroku

解决方案


您将后端部署到 heroku

但没有在您的前端应用程序中更新后端网址

const httpLink = createHttpLink({
    uri: 'http://localhost:5000/' // <-- here
});

推荐阅读