【问题标题】:Vue-resource can't load express static fileVue-resource 无法加载 express 静态文件
【发布时间】:2017-01-03 08:44:37
【问题描述】:

所以,我有一点问题。这是我的 server.js

require('dotenv').load();
const http = require('http');
const path = require('path');
const express = require('express');

const app = express();



const server = http.createServer(app).listen(8080, () => {
    console.log('Foliage started on port 8080');
});

app.use(express.static(path.join(__dirname, '/public')));

app.get('/', (req, res) => {
    res.sendFile(path.join(__dirname, 'index.html'));
});

app.get('*', (req, res) => {
    res.sendFile(path.join(__dirname, 'index.html'));
});

它的作用是为每个/whatever 提供index.html 文件。除此之外,它还提供来自/public 的静态文件现在,我的 index.html 看起来像这样:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>Foliage</title>
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <link rel="stylesheet" href="css/foliage.css" media="screen" title="no title">
        <script src="https://use.fontawesome.com/763cbc8ede.js"></script>
    </head>
    <body>
        <div id="app">
            <router-view :key="$router.currentRoute.path"></router-view>
        </div>
        <script src="https://code.jquery.com/jquery-3.1.1.min.js" integrity="sha256-hVVnYaiADRTO2PzUGmuLJr8BLUSjGIZsDYGmIJLv2b8=" crossorigin="anonymous"></script>
        <script src="js/md5.js"></script>
        <script src="js/cookies.js"></script>
        <script src="js/dragula.js"></script>
        <script src="js/build.js"></script>

    </body>
</html>

为此,所有的 JS 文件和样式文件都是从 public/jspublic/css 适当加载的。但是,在build.js 中,这是一个 webpack-ed vuejs 应用程序,我使用 vue-resource 从public/themes/Bareren/templates 加载另一个文件。看起来像这样

page = {};
page.Template = "Index";   
this.$http.get('themes/Barren/templates/'+page.Template+'.html').then((response) => {
      console.log(response.body);
});

但是,这个请求没有给我public/themes/Barren/templates 中的文件。相反,它会返回站点自己的 index.html 文件。我该如何解决这个问题?

【问题讨论】:

    标签: javascript node.js express vuejs2 vue-resource


    【解决方案1】:

    app.use(express.static(path.join(__dirname, '/public')));

    app.get('/', (req, res) => { res.sendFile(path.join(__dirname, 'index.html')); });

    app.get('*', (req, res) => { res.sendFile(path.join(__dirname, 'index.html')); });

    尝试 console.log(path.join(__dirname, '/public')) 和 console.log(path.join(__dirname, 'index.html') 看看路径是否符合您的预期。

    this.$http.get('themes/Barren/templates/'+page.Template+'.html').then((响应) => { 控制台.log(response.body); });

    您也可以尝试在控制台记录您的获取请求。通常我需要使用路径来确保我提供正确的文件。

    【讨论】:

    • 希望我能给你两票。控制台日志显示我的 express 服务器上的 __dirname 指向 C:\source\g3tools-api\src\static。我将我的静态文件夹和文件放在 src 之外。所以,荣誉。
    【解决方案2】:

    您可以尝试的一件事是定义一个GET 路由,该路由在底部通配符之前 响应您的模板。

    app.get('/themes', (req, res) => {
      // get the theme name
      res.sendFile(path.join(__dirname, ... ));
    });
    
    app.get('*', (req, res) => {
      res.sendFile(path.join(__dirname, 'index.html'));
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-10
      • 2014-07-12
      • 2018-03-19
      • 2017-05-18
      • 1970-01-01
      相关资源
      最近更新 更多