Reactjs 如何在CreateReact应用程序中修改index.js文件

Reactjs 如何在CreateReact应用程序中修改index.js文件,reactjs,create-react-app,Reactjs,Create React App,我正在尝试修改create react app预配置项目中的入口点文件index.js。我试图将该项目连接到mongodb,在index.js中添加主体解析器和api文件,但编辑index.js时出错 Index.js: import React from 'react'; import ReactDOM from 'react-dom'; import './index.css'; import App from './App'; ReactDOM.render(App, document.g

我正在尝试修改create react app预配置项目中的入口点文件index.js。我试图将该项目连接到mongodb,在index.js中添加主体解析器和api文件,但编辑index.js时出错

Index.js:

import React from 'react';
import ReactDOM from 'react-dom';
import './index.css';
import App from './App';
ReactDOM.render(App, document.getElementById('root'));
我的代码:

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

mongoose.connect('mongodb://localhost/treedb')
mongoose.Promise = global.Promise
app.use(bodyParser.json())

//initialize routes
app.use('/api', require('./routes/api'))
错误:

TypeError: Cannot read property 'prototype' of undefined
in file node_modules/express/lib/response.js:58:

var res = Object.create(http.ServerResponse.prototype);

当我使用“npm启动”启动应用程序并且运行“react scripts start”时,会发生此错误。当我运行“node index.js”时,我的代码很好,但是import语句会导致错误。你知道如何编辑index.js文件而不引起错误吗?谢谢。

正如@skyboyer所提到的,你似乎在使用Create React应用程序,而不是为了达到它的目的。Create-React-App是一个工具包,它使您能够快速开始开发基于React的web应用程序,而无需担心设置和维护webpack配置等问题。您似乎正在尝试设置一个连接到MongoDB的API服务器

如果您只想创建一个express应用程序作为API服务器,而不需要任何基于react的前端,那么您不应该使用CRA进行设置

最可能的情况是,您需要同时拥有两个应用程序:客户端webapp(基于React)和服务器端API应用程序(基于express),在这种情况下,您有两个选项:

  • 同一个项目,但有两个源目录。您可以为e.x创建一个与
    src
    相同级别但名称不同的文件夹:
    dataSrc
    ,然后您可以修改package.json以启动两台服务器。我不建议这样做,除了出于学习的目的,因为这将使您难以维护,当您需要捆绑并交付给prod时,这将变得棘手
  • 为API服务器创建一个新项目,该项目与web应用程序分开 在这两种情况下,为了进行开发,您都需要将CreateReact应用程序配置为API服务器


    希望这能让你明白一些。如果仍然有什么让您感到困惑,请随时询问澄清。

    我认为问题与您试图通过执行node index.js在服务器上运行客户端应用程序有关

    也可能是您的服务器和客户端文件都名为
    index.js
    ,这是不可取的,除非它们被放在单独的文件夹中


    作为最后一分钟的检查,运行
    npm install
    以确保正确安装所需的依赖项,然后运行
    node index.js

    在浏览器中运行时是否出现此错误?似乎您正在尝试将与后端相关的内容添加到客户端上运行的文件中。就像。是的,这就是问题所在。谢谢你,非常感谢!这很有帮助。我现在明白了。我有个问题。如何将项目确定为客户端或服务器端应用程序?index.js中的代码是否决定了这一点?如果我可以将其过分简化,这取决于是什么执行index.js中的代码,对于e.x来说。如果在nodejs进程上执行index.js,它是一个服务器端应用程序,如果必须通过浏览器下载index.js才能执行,它是一个客户端应用程序。您还可以将其视为,执行(开始、停止等)是否由您控制。通常,您或您的运营团队或服务提供商可以启动、停止服务器端应用程序等,但您无法阻止用户执行用户在其浏览器上下载的index.js文件。我将链接一个简单的教程,当我发现它有点过时,但仍然是一个体面的解释。您可能会被服务器端呈现(SSR)或无服务器这个术语弄糊涂,在您理解堆栈之前,尽量不要查看它们。我明白了,我想我明白了。谢谢你的帮助!是的,我试着像使用后端应用程序一样使用客户端应用程序。谢谢你的帮助。