- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我一直在使用 Vercel 来托管几个 React 网络应用程序,它非常棒!最近,我升级了一个带有后端(Express.js 和 MongoDB Atlas)的现有项目,我也想在那里托管它。
在我的机器上,MongoDB 服务器和所有 CRUD 路由都在 localhost:5000 上顺利运行,但我想知道如何将其添加到 Vercel 部署中。 Vercel 的文档侧重于无服务器部署,虽然我不介意在必要时重写我的后端,但我想知道是否有更简单的解决方案来添加服务器/数据库。
MERN 堆栈仍然相对流行,所以我想很多开发人员都找到了托管此类项目的方法。如果有人可以提供帮助,我将不胜感激!
最佳答案
根据您的评论,您的文件结构应如下所示
// + refer as close folder
// - refer as open folder
// > refer as file
main
- backend
+ models
+ routes
> package.json
> package-lock.json
> server.js
- frontend
+ public
- src
+ pages
+ components
> package.json
> package-lock.json
第一步 - 编辑前端 package.json
添加主页
{
// initially add link whatever you suppose to be link of your site
// then after deploying to vercel, you get the exact link
// then replace it with vercel link in "homepage" key
"homepage": "https://awesome-app.vercel.app",
"name": "awesome-app",
"version": "1.0.0,
"private": true,
...rest of your frontend package.json file
}
step2 - 添加基本名称
// you wrapped your app with either BrowserRouter or HashRouter
// add basename prop so it refer to your package.json homepage
// if your route are '/awesome-route' then is converted to
// https://awesome-app.vercel.app/awesome-route
<BrowserRouter basename='/'> // or HashRouter
<Switch>
...your routes
</Switch>
</BrowserRouter>
第 3 步 - 构建你的 react
you have to build your frontend everytime before deployment if and only if your change your frontend code
那么您的前端应该如下所示
- frontend
+ build // build folder at root of your frontend
+ public
- src
+ pages
+ components
> package.json
> package-lock.json
第 4 步 - 更改您的 server.js 文件
应该看起来像这样
// i use "dotenv" package
// in your case must be located at "main > backend > .env"
// see the final file structure at bottom if you don't understand
if (process.env.NODE_ENV !== 'production') {
require('dotenv').config({path: __dirname+'/.env'});
}
const express = require('express');
const mongoose = require('mongoose');
const path = require('path');
const app = express();
app.use(express.json());
const port = process.env.PORT || 5000;
mongoose.connect(process.env.mongoURI, {
useNewUrlParser: true,
useUnifiedTopology: true,
useCreateIndex: true,
useFindAndModify: false,
// remove poolSize or set according to your need
// read docs before setting poolSize
// default to 5
poolSize: 1
})
.then(() => {
app.listen(port);
})
// all your routes should go here
app.use('/some-route', require(path.join(__dirname, 'api', 'routes', 'route.js'));
// static files (build of your frontend)
if (process.env.NODE_ENV === 'production') {
app.use(express.static(path.join(__dirname, '../frontend', 'build')));
app.get('/*', (req, res) => {
res.sendFile(path.join(__dirname, '../frontend', 'build', 'index.html'));
})
}
step5 - 添加vercel.json在你的存储库的根级别,即在你的情况下 main
目录
{
"version": 2,
"builds": [
{
"src": "./backend/server.js", // path to your server.js file
"use": "@vercel/node"
},
{
"src": "./frontend/build", // path to your build folder
"use": "@vercel/static"
}
],
// rewrites any request to api call with server.js
// now your "app.use('/some-route')" would work as normal as localhost
// no need to change your codes to serverless way
// also remember here "/(.*)" is not regular js regex
// it follows path-to-regex
// playground link: https://regexr.com
"rewrites": [
{
"source": "/(.*)",
"destination": "/backend/server.js"
}
]
}
最后你的文件结构是这样的
// + refer as close folder
// - refer as open folder
// > refer as file
main
- backend
+ models
- routes
> route.js
> package.json
> package-lock.json
> .env
> server.js
- frontend
- build
+ static
> manifest.json
> index.html
+ public
+ src
> package.json
> package-lock.json
> vercel.json // in your main directory's root
这种方法的缺点是每次将代码库推送到 github 时都必须构建前端
remember to build your frontend before you push your repo to github if and only if you change your frontend code
also remember to replace your homepage url in your frontend package.json file after deployment with vercel provided url or your custom domain url
快乐编码:)
关于reactjs - 2021 年使用 Vercel 托管 MERN 应用程序(不使用 Next.js),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68878329/
我正在为计划部署到 Vercel 的项目做一些早期研究。我想知道以下是否可能: 我想在 GitHub 存储库上拥有。此存储库将使用 API token 和基本设置的环境变量。 我有我想要创建的项目的三
我使用Go创建了一个rest API,并使用githeb.com/tbxark/g4vercel将其部署到Vercel。。这是我的项目结构:。现在,在index.go文件中,我有以下代码:。但Verc
I am using Next 13 app dir.我正在使用Next 13应用程序目录。 I have a route.ts file:我有一个route.ts文件: app/api/c
部署到 Vercel 时出现以下错误: Module not found: Can't resolve 'fs' in '/vercel/2d531da8/node_modules/mysql/lib
部署到 Vercel 时出现以下错误: Module not found: Can't resolve 'fs' in '/vercel/2d531da8/node_modules/mysql/lib
我真的很喜欢在 Vercel 上部署应用程序。然而,我确实想知道人们应该如何处理不可避免地会创建的所有预览部署。 你应该自己删除它们吗?有没有办法在一定时间后自动删除预览部署? 最佳答案 无需删除预览
我正在开发一个新网站,虽然我们在本地开发时一切正常,但当我们尝试在 Vercel 上部署时遇到了问题。该应用程序为页面和 API 使用 Sapper 框架,以及我们通过 Mongoose 访问的 Mo
在遵循 Zeit 关于使用他们的 now CLI 的教程之后,我通过调用一个简单的“now”命令创建了一个子域,然后通过调用“now alias AUTOGENERATED_NAME MY_CUSTO
如何使用 Zeit now CLI 设置别名以便 www.mydomain.com 永久重定向到 mydomain.com? 我试过 now dns add mydomain.com www CNAM
我的 API 在另一个域下运行.. 我正在尝试使用 Vercel 配置代理.. 它正在向 /api/test.json 发出请求的应用程序所以我试图......在vercel配置上 "redirect
我正在使用带有静态站点生成功能的 Next.js。我想将增量静态再生添加到我的应用程序中并将其托管在云平台上。 是否可以在 Vercel 以外的其他平台(例如 Azure、AWS 等)上使用 ISR?
我已经在 github 的 vercel 上部署了 flutter 项目,但是部署后它显示: 404: NOT_FOUND Code: NOT_FOUND. Framework presets: Ot
我正在使用带有静态站点生成功能的 Next.js。我想将增量静态再生添加到我的应用程序中并将其托管在云平台上。 是否可以在 Vercel 以外的其他平台(例如 Azure、AWS 等)上使用 ISR?
我已经在 github 的 vercel 上部署了 flutter 项目,但是部署后它显示: 404: NOT_FOUND Code: NOT_FOUND. Framework presets: Ot
我在访问部署在 Vercel 上的环境变量时遇到问题。 在我笔记本电脑的 localhost 上测试站点时,它运行良好,但一旦部署到 Vercel 就无法运行。 我正在尝试访问我的 component
我在我的网站上运行 Vercel 编译,我无法摆脱导出时的预渲染错误。 有谁知道发生这种情况的原因并且可以帮助我吗? 我的 github 和所有代码:https://github.com/M0rill
我在 Next.js 项目中使用谷歌地图,一切都在本地工作。谷歌地图 key 存储在 next.config.js 中,我通过 process.env.NEXT_PUBLIC_GOOGLEMAPS 在
我有一个部署到 Vercel 的 nextjs 应用程序,并且我正在尝试将管理它的 Strapi cms 也部署到 Vercel,因为在同一服务上维护两者会更容易。 Strapi 存储库构建良好,一切
我想将我的 create-react-app 部署到 Vercel。 我在我的 now.json 中定义我的重定向,如下所示: { "redirects": [ { "source"
我发现我可以使用 Python 在 Next.js 中创建一个无服务器函数项目。一旦部署到 Vercel ,它将被转换为无服务器功能。 我浏览了文档并找到了 simple example输出日期: f
我是一名优秀的程序员,十分优秀!