node.js - 部署 VueJS 应用程序 - 后端 (ExpressJS) 没有响应
问题描述
这是我第一次部署 VueJS 应用程序。它是全栈,后端是 Express/MySQL。在开发者模式下一切正常。我的开发平台是 Windows 10,VS Code。
我目前正在尝试使用本地网络服务器在我的开发 PC 上预览该应用程序。
为此,我将 Vue 应用程序构建到服务器/公共。然后静态站点运行良好,但我似乎无法让 Express 后端响应,无论是从应用程序还是从直接访问 api 的浏览器。我遵循了 Brad Traversy 教程中的模型,这是 vue.config.js 的样子:
const path = require('path');
module.exports = {
outputDir: path.resolve(__dirname, './server/public'),
devServer: {
disableHostCheck: true,
proxy: {
'/api': {
target: 'http://localhost:5000'
}
}
},
transpileDependencies: ['vuetify'],
pluginOptions: {
i18n: {
locale: 'en',
fallbackLocale: 'en',
localeDir: 'locales',
enableInSFC: false,
},
},
};
这是 Express/后端的 index.js。我注释掉了 NODE_ENV 测试,因为我还没有弄清楚如何正确设置它。这应该只是硬连线代码以在生产模式下运行。__dirname 指向服务器目录,其中包含 Express 代码和其他服务器内容。
// Create express app
const express = require('express');
const bodyParser = require('body-parser');
const cors = require('cors');
//Create Express App
const app = express();
// Add Middleware
app.use(bodyParser.json());
app.use(cors());
//
const water = require('./routes/api/water');
const waterlog = require('./routes/api/waterlog');
// Direct /api
app.use('/api/water', water);
app.use('/api/waterlog', waterlog);
// Handle production
// if (process.env.NODE_ENV === 'production') {
// Static folder
app.use(express.static(__dirname + '/public/'));
// Handle SPA
app.get(/.*/, (req, res) => res.sendFile(__dirname + '/public/index.html'));
// }
const port = process.env.PORT || 5000;
app.listen(port, () => console.log(`CORS-EnabledServer started on port ${port}`));
我使用(来自 npm serve)这个来启动 Vue 应用程序:
serve -s server/public
我错过了什么?感觉很近,但还没有雪茄……
解决方案
serve
只是一个简单的静态 HTTP 服务器。它不会运行您的后端。
您的生产构建将您的前端资产放入您的 Express 应用程序的静态服务目录中,因此您在构建前端后需要做的就是启动您的服务器
# Build your front-end
npm run build
# Start your Express server, assuming this is configured in package.json
NODE_ENV=production npm start
现在在浏览器中打开http://localhost:5000/
另请参阅https://expressjs.com/en/advanced/best-practice-performance.html#set-node_env-to-production
推荐阅读
- r - 如何使用坐标和 R 中 shapefile 中的另一个值从栅格中提取值?
- java - 使用 Access VBA 获取 java jre/bin 文件路径
- python - 尝试调用 python 脚本时,批处理脚本无法正常工作
- python - 为什么 python 以东方字符写入我的 CSV 文件?
- javascript - 在 React 中使用箭头函数的 SetInterval 和回调
- ios - 无法将类型“[ViewController.MyStruct]”的值分配给类型“[ViewController.MyOtherStruct]”
- ios - React Native FBSDK Login - 使用应用程序登录失败
- google-sheets - 如何在 Google 表格中可视化依赖关系图(产品路线图)
- apache-tomee - 将 TomEE Plus 7.1.0 与 MyEclipse CI 2018 集成
- r - 保存 XLS 文件格式错误:自动转换为数字