use*_*236 2 node.js express vuejs2
由于生产结构和开发结构的不同,我在vue 2项目(webpack-simple模板)中表达静态数据时遇到问题。
开发:localhost / app
生产:服务器/某些目录/应用
一些目录经常更改,因此可以在配置文件中动态设置。
我的server.js服务部分:
if (config.root !== '/') {
app.use(`/${config.root}`, express.static(path.join(__dirname)));
}
app.use('/dist', express.static(path.join(__dirname, 'dist')));
Run Code Online (Sandbox Code Playgroud)
转译的JS文件位于/ dist文件夹中。
这是用作应用程序入口点的index.html文件:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>App Demo</title>
</head>
<body>
<div id="app"></div>
<script src="/dist/build.js"></script>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
它在开发中有效,因为应用程序是根目录。
但是在生产版本中,它不起作用,因为应用程序是从服务器子文件夹提供的。
任何想法如何解决这个问题?
谢谢。
小智 6
假设您的express js服务器与vue应用程序位于同一文件夹中:
const express = require('express');
const path = require('path');
const hostname = 'localhost';
const port = 3000;
const app = express();
app.use(express.static(path.join(__dirname, 'dist')));
app.get('*', (req, res) => {
res.sendFile(__dirname, '/dist/index.html');
});
app.listen(port, hostname, () => {
console.log("Listening at http://%s:%s/", hostname, port);
});
Run Code Online (Sandbox Code Playgroud)
不要忘记先构建您的Vue应用!
但在生产构建中它不起作用,因为应用程序是从服务器子文件夹提供的。
事实上,“这不起作用”这句话并没有告诉我们什么。什么不起作用?您在客户端收到一些错误吗?服务器出错?HTML 会出现 404 错误吗?HTML 没问题,但是图片会出现 404 错误吗?您没有具体说明问题所在,因此我只能在这里给您一些一般性建议。
如果您使用 Express 创建路由器:
const router = require('express').Router();
router.get('/a', ...);
router.get('/b', ...);
router.use('/c', express.static(...));
Run Code Online (Sandbox Code Playgroud)
那么您将能够非常轻松地将整个应用程序放入任何子路径中:
app.use('/x', router);
Run Code Online (Sandbox Code Playgroud)
其中/x是您所需的前缀。
但您还需要确保所有静态资源(例如 HTML 文件)不使用任何绝对路径 - 例如:
<a href="/a/b/c.html">...</a>
<script src="/a/b/c.js"></script>
Run Code Online (Sandbox Code Playgroud)
但只有相对路径,例如:
<a href="b/c.html">...</a>
<script src="../../a/b/c.js"></script>
Run Code Online (Sandbox Code Playgroud)
如果您不理会您的应用程序并使用反向代理添加所需的路径前缀,这也是正确的 - 您也可以这样做,而不是弄乱您的 Node 代码,并且在这种情况下可能会更容易。有关 Node 应用程序反向代理的更多信息,请参阅以下问题:
| 归档时间: |
|
| 查看次数: |
2291 次 |
| 最近记录: |