【问题标题】:My react node app not reading data from backend after deploying on heroku在 Heroku 上部署后,我的反应节点应用程序未从后端读取数据
【发布时间】:2021-09-12 01:49:10
【问题描述】:

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

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

Project Structure

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

前端/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}`);
  });

【问题讨论】:

  • 您在浏览器开发者工具控制台中遇到错误了吗?
  • MONGODB 的值是否为 heroku 设置正确?
  • 在 mongodb 中应该做哪些改变?

标签: node.js reactjs heroku


【解决方案1】:

您已将后端部署到 heroku

但未在您的前端应用中更新后端网址

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

【讨论】:

  • 我猜 heroku 链接会来这里而不是 localhost,对吧?
  • 不幸的是,它没有用。这次即使前端也没有工作,因为它给了我应用程序错误。
猜你喜欢
  • 1970-01-01
  • 2021-03-01
  • 1970-01-01
  • 2022-01-16
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
  • 2017-01-07
  • 1970-01-01
相关资源
最近更新 更多