大家好,我是若川。持续组织了6个月源码共读活动,感兴趣的可以点此加我微信 ruochuan12 参与,每周大家一起学习200行左右的源码,共同进步。同时极力推荐订阅我写的《学习源码整体架构系列》 包含20余篇源码文章。历史面试系列

React 前端与 Node 后端相配合,对于你想创建的任何应用程序来说都是一个坚如磐石的组合。

本指南旨在帮助你用 React 尽可能容易地创建一个全栈项目。让我们看看如何使用 React 和 Node 从头开始创建一个完整的项目,并将其部署到网络上。

你需要的工具

  • 确保 Node 和 NPM 已经安装在你的电脑上。你可以在这个网站下载这两样东西:nodejs.org(NPM 包含在你安装的 Node 中,不需要另外安装)。

  • 使用你选择的代码编辑器。我正在使用并且个人推荐使用 VSCode。你可以在这个网站下载 VSCode:code.visualstudio.com。

  • 确保你的电脑上安装了 Git。这对于用 Heroku 部署我们的应用程序是必要的。你可以在这个网站上下载:git-scm.com。

  • 一个在 heroku.com 的账号。我们将使用 Heroku 将应用程序完全免费地发布到网上。

第一步:创建你的 Node(Express)后端

首先为你的项目创建一个文件夹,命名为react-node-app(示例名称)。

然后,将该文件夹拖入你的代码编辑器。

为了创建我们的 Node 项目,在你的终端运行以下命令:

npm init -y

这将创建一个 package.json 文件,使我们能够跟踪所有的应用程序脚本,并管理我们的 Node 应用程序需要的任何依赖。

我们的服务器代码将放在一个同名的文件夹中:server。让我们来创建这个文件夹。

在这个文件夹中,我们将放置一个文件,从这个文件中运行服务。index.js

我们将使用 Express 创建一个简单的 Web 服务器,如果环境变量PORT没有给定值,则运行在 3001 端口(Heroku 将在我们部署应用程序时设置这个值)。

// server/index.jsconst express = require("express");const PORT = process.env.PORT || 3001;const app = express();app.listen(PORT, () => {console.log(`Server listening on ${PORT}`);
});

然后在我们的终端安装 Express 作为一个依赖项来使用它。

npm i express

之后,我们将在 package.json 中创建一个脚本,当我们用npm start运行它时,将启动我们的 Web 服务。

// server/package.json...
"scripts": {"start": "node server/index.js"
},
...

最后,我们可以通过在终端运行 npm start 来运行应用程序,我们应该看到它正在 3001 端口上运行。

npm start> node server/index.jsServer listening on 3001

第二步:创建一个 API

我们想把我们的 Node 和 Express 服务器作为一个 API,这样它就可以给 React 应用提供数据,改变这些数据,或者做一些其他只有服务才能做的操作。

在这个例子中,我们将简单地给 React 应用发送一个 JSON 对象中的 "Hello from server!"消息。

下面的代码为路由/api创建了一个 endpoint。

如果我们的 React 应用向该路由发出一个 GET 请求,我们就会用 JSON 数据进行响应(使用res,代表响应)。

// server/index.js
...app.get("/api", (req, res) => {res.json({ message: "Hello from server!" });
});app.listen(PORT, () => {console.log(`Server listening on ${PORT}`);
});

注意:请确保将其放在app.listen函数之前。

由于我们已经对 Node 代码进行了修改,我们需要重新启动服务器。

要做到这一点,在终端按 Command/Ctrl+C 结束你的启动脚本,然后再次运行npm start重新启动它。

为了测试这一点,我们可以简单地在浏览器中访问http://localhost:3001/api,看看我们获得的信息。

第三步:创建 React 前端

在创建了后端之后,让我们转到前端。

打开另一个终端标签,使用 create-react-app 创建一个新的 React 项目,名称为client

npx create-react-app client

之后,我们将拥有一个安装了所有依赖项的 React 应用。

我们要做的唯一改变是在 package.json 文件中添加一个名为proxy的属性(client文件夹下的 package.json 文件)。

这将允许我们向 Node 服务器发出请求,而不必在每次向它发出网络请求时提供它所运行的原点(http://localhost:3001)。

// client/package.json...
"proxy": "http://localhost:3001",
...

然后我们可以通过运行它的启动脚本来启动 React 应用,这和我们的 Node 服务器一样。首先确保cd进入新创建的client文件夹。

之后,将在localhost:3000上启动(其实启动两个 Node 的进程,一个是 React 开发使用,一个是 Express 开发使用)。

cd client
npm startCompiled successfully!You can now view client in the browser.Local:            http://localhost:3000

第四步:从 React 向 Node 发出 HTTP 请求

现在我们有了一个工作的 React 应用,我们想用它来与我们的 API 进行交互。

让我们看看如何从我们之前创建的/apiendpoint 获取数据。

要做到这一点,我们可以前往src文件夹中的App.js组件,使用useEffect进行 HTTP 请求。

我们将使用 Fetch API 向后端发出一个简单的 GET 请求,然后将我们的数据以 JSON 格式返回。

一旦我们得到了返回的数据,我们将得到消息属性(抓取从服务器发送的问候语),然后把它放在一个叫做data的状态变量中。

这将使我们能够在页面中显示该消息,如果我们有的话。我们在 JSX 中使用一个条件,如果数据还没有,就显示文本 Loading...

// client/src/App.jsimport React from "react";
import logo from "./logo.svg";
import "./App.css";function App() {const [data, setData] = React.useState(null);React.useEffect(() => {fetch("/api").then((res) => res.json()).then((data) => setData(data.message));}, []);return (<div className="App"><header className="App-header"><img src={logo} className="App-logo" alt="logo" /><p>{!data ? "Loading..." : data}</p></header></div>);
}export default App;

用 Heroku 将你的应用程序部署到网上

最后,让我们把应用程序部署到网络上。

首先,在我们的client文件夹中,确保删除由 create-react-app 自动初始化的 Git repo(rm -rf .git, .git 是隐藏文件夹,不能直接看到)。

这对部署我们的应用程序至关重要,因为我们要在项目的根文件夹(react-node-app)中建立 Git repo,而不是在client中。

cd client
rm -rf .git

当我们部署时,Node 后端和 React 前端都将在同一个域名(即 mycoolapp.herokuapp.com)提供服务。

我们看到请求是如何被 Node API 处理的,所以我们需要写一些代码,当我们的 React 应用被用户请求时(例如,当我们进入应用的主页时)显示 React 应用。

我们可以在server/index.js中加入以下代码来完成这个工作。

// server/index.js
const path = require('path');
const express = require('express');...// 让 Node 为我们创建的 React 应用提供文件
app.use(express.static(path.resolve(__dirname, '../client/build')));// 处理对/api 的 GET 请求
app.get("/api", (req, res) => {res.json({ message: "Hello from server!" });
});// 所有之前未被处理的 GET 请求将返回我们的 React app
app.get('*', (req, res) => {res.sendFile(path.resolve(__dirname, '../client/build', 'index.html'));
});

这段代码将首先允许 Node 使用express.static函数来访问我们创建的 React 项目的静态文件。

如果有一个 GET 请求进来,而这个请求没有被我们的/api路由处理后,我们的服务器将用 React 应用来响应。

这段代码允许我们的 React 和 Node 应用一起部署在同一个域名。

然后我们可以告诉 Node App 如何做,在我们的服务器 package.json 文件中添加一个build脚本,为生产创建我们的 React 应用。

// server/package.json...
"scripts": {"start": "node server/index.js","build": "cd client && npm install && npm run build"},
...

我还建议提供一个名为engines的字段,在这里你要指定你用来创建项目的 Node 版本。这将被用于部署。

你可以通过运行node -v来获得你的 Node 版本,你可以把结果放在engines中(例如14.15.4)。

// server/package.json"engines": {"node": "your-node-version"
}

在这之后,我们准备使用 Heroku 进行部署,所以请确保你在 Heroku.com 有一个账户。

当你登录并查看你的仪表板(dashboard),你将选择新建(New)>创建新的应用程序(Create New App),并提供一个唯一的应用程序名称。

sudo npm i -g heroku

当安装完毕,你将通过 CLI 使用heroku login命令登录到 Heroku。

heroku loginPress any key to login to Heroku

登录后,只需在 "Deploy "选项卡中为我们创建的应用程序遵循部署说明。

以下四个命令将为我们的项目初始化一个新的 Git repo,将我们的文件添加到其中,提交它们,并为 Heroku 添加一个 Git 远程。

git init
heroku git:remote -a insert-your-app-name-here
git add .
git commit -am "Deploy app to Heroku"

然后,最后一步是通过推送我们刚刚添加的 Heroku Git 远程地址(heroku git:remote -a insert-your-app-name-here),来发布我们的应用程序。

git push heroku master

恭喜!我们的全栈式 React 和 Node 应用已经上线。

如何使用 Node 后端创建 React 应用程序:完整指南相关推荐

  1. 创建react应用程序_通过创建食谱应用程序来学习在React中使用API

    创建react应用程序 Learn how to use external APIs with React and React Router in a full tutorial from Hamza ...

  2. 创建react应用程序_使用SpringWebFlux的React式Web应用程序

    创建react应用程序 1.React式编程简介 React式编程是为具有以下特征的应用程序创造的术语: 非阻塞应用 事件驱动和异步 需要少量线程来垂直扩展(即在JVM中) 就像面向对象的编程,函数式 ...

  3. 创建react应用程序_通过构建电影搜索应用程序在1小时内了解React

    创建react应用程序 If you've been meaning to learn React but are unsure of where to start, Scrimba's brand ...

  4. 创建react应用程序_如何使用React创建一个三层应用程序

    创建react应用程序 Discover Functional JavaScript was named one of the best new Functional Programming book ...

  5. 创建react应用程序_如何将React应用程序部署到Netlify

    创建react应用程序 by Abhishek Jakhar 通过阿比舍克·贾卡(Abhishek Jakhar) 如何将React应用程序部署到Netlify (How to deploy a Re ...

  6. 创建react应用程序_如何使您的React应用程序具有完整的功能,完全的React性并能够处理所有这些疯狂的事情……...

    创建react应用程序 by Luca Matteis 卢卡·马蒂斯(Luca Matteis) 如何使您的React应用程序具有完整的功能,完全的React性并能够处理所有这些疯狂的副作用 (How ...

  7. “ create-react-app”和创建React应用程序的未来

    Over the past few years, I've been heavily involved with teaching people how to build applications w ...

  8. 使用 Redux Toolkit 和 RTK 查询创建 React 应用程序

    您是否曾经想将 Redux 与 React Query 提供的功能一起使用?现在,您可以使用 Redux Toolkit 及其最新添加的功能:RTK Query. RTK Query 是一种高级数据获 ...

  9. 将 Google 登录添加到 React 应用程序的指南

    有时我们只想使用应用程序,没有耐心先注册并使用我们的电子邮件和密码登录.我们也可能只是想试用该应用程序,而不希望为此而不得不创建一个新帐户的负担. 同时,应用程序的所有者需要知道有多少用户使用了他们的 ...

最新文章

  1. RUP within the context of the Six Best Practices
  2. 从向量的角度理解皮尔逊相关系数
  3. idea findbugs使用_「测试」 - 静态测试 amp; FindBugs
  4. 微信公众平台开发(44)历史上的今天
  5. Django-MySQL数据库使用01
  6. 揭秘阿里云 RTS SDK 是如何实现直播降低延迟和卡顿
  7. 非线性优化库liblbfgs初探
  8. 7-2 数组元素循环右移问题 (40 分)
  9. C# visionpro搜索区域拖动改变事件
  10. LeetCode 105. 从前序与中序遍历序列构造二叉树(dfsdfs、边界判定情况、做一题送一题)
  11. 如何用Python画QQ表情中的滑稽脸
  12. 研大考研:2015考研政治认识论知识点
  13. 京版国八条终于出来了——京十五条
  14. 解决“ 故障模块名称: clr.dll ”
  15. :“Entry point was not found.” 如何解决
  16. 港股2017年表现全球最好,区块链将助推新经济牛市?
  17. 2口kvm切换器使用方法简述
  18. SpringBoot新项目配置
  19. 微软软件测试部门裁剪,Windows 10稳定性太差是因为测试团队被裁撤?微软发布博客进行回应...
  20. HTML5期末大作业:宠物主题网站设计——酷酷动物主题响应式网页(5页) HTML+CSS+JavaScript...

热门文章

  1. Day_03-函数和模块的使用
  2. MySQL源码包编译安装
  3. makefile与stm32工程皮毛了解
  4. 【NOI 2018】归程(Kruskal重构树)
  5. arcgis建立拓扑分析(检验矢量图)
  6. Bootstrap-CSS:表格
  7. 安装你自己的perl modules
  8. Cocos2d-x v3.0物理系统 利用PhysicsEditor创建多边形
  9. jQuery调用WebService返回JSON数据
  10. 每日英语:Five Really Dumb Money Moves You've Got to Avoid