无法将任何文件附加到HTML

时间:2016-10-20 21:12:21

标签: javascript node.js hapijs static-files

基于the tutorials我尝试通过HapiJS在NodeJS中设置基本服务器。

初始化如下所示:

Decoder

这是app.js的内容:

    //globals
    mainAddr = "MoriMachine";
    mainPort = 3000;

    require('./backend/app.js')

虽然index.html同样很小:

    const Hapi = require('hapi');
    const server = new Hapi.Server();

    server.connection({host: mainAddr, port: mainPort });
    server.register(require('inert'), (err) => {
        if (err) { throw err; }
        server.route({
            method: 'GET',
            path: '/',
            handler: function (request, reply) {
                reply.file('./public/index/index.html');
            }
        });
    });

    server.start((err) => {
        if (err) { throw err; }
        console.log(`Server running at: ${server.info.uri}`);
    });

在项目本身中,有init.js和三个文件夹:

  • node_modules:显而易见的原因
  • backend:包含app.js
  • public:包含文件夹'index',其中包含HTML,以及我尝试附加的JS和图片。

问题在于,无论我尝试什么路径,当我运行服务器时,都没有找到JS或图片。

是什么原因?我错过了添加一些额外的功能?

1 个答案:

答案 0 :(得分:1)

原因是您只有一条路由服务于一个特定文件。当您访问路线'/'时,您的浏览器会尝试访问'/index.js'和'/test.jpg'而您没有回应这些路线。

一种方法是提供公共目录中的所有内容,如下所示:

server.route({
    method: 'GET',
    path: '/{param*}',
    handler: {
        directory: {
            path: 'public'
        }
    }
});

现在您的index.js可通过/index/index.js访问,您的图片可通过/index/test.jpg访问

所以对你的html进行这些更改

        <!DOCTYPE html>
        <html>
            <head>
                <script src="/index/index.js"></script>
            </head>
            <body>
            <h1>HELLO WORLD!! -3-</h1>
                <img src="/index/test.jpg"></img>
            </body>
        </html>

请注意,通过这种方式,您的index.html也可通过/index/index.html

访问

更多详情请看:http://hapijs.com/tutorials/serving-files?lang=en_US#directory-handler