使用带有默认前缀的nodejs提供静态html文件

时间:2016-02-29 18:58:13

标签: javascript node.js browser static-files

我正在使用Restify来提供我的静态网页。 html文件调用服务器以获取脚本和css文件。

我正在创建的服务器需要使用前缀为/ safe / endpoint

的所有端点

我已经能够为index.html文件提供服务,但是当浏览器尝试包含脚本和css文件时,我会收到404状态代码。

当我转到localhost:1337 / safe / endpoint时,我得到正确呈现的index.html。但是当浏览器尝试下载其他文件时,它会使用localhost:1337 / safe而不是localhost:1337 / safe / endpoint为index.html中的路径添加前缀。

示例:

index.html以此路径提供

localhost:1337/safe/endpoint
index.html文件中的

我有这个包含

<script src="app/js/thing.js"></script>

当浏览器尝试获取thing.js时使用此路径

localhost:1337/safe/app/js/thing.js

而不是

localhost:1337/safe/endpoint/app/js/thing.js

服务器代码如下所示

server.get("/safe/endpoint", function(req, res){
  fs.readFile("./frontend/index.html", "utf8", function(err, data){
    if(err){
      res.setHeader('content-type', 'text/plain');
      res.send(404, "No index.html found");
    } else {
      res.setHeader('Content-Type', 'text/html');
      res.writeHead(200);
      res.end(data);
    }
  });
});

server.get("/safe/endpoint/app/.*", function(req, res){
  var filePath = "./frontend" + req.url.split("/safe/endpoint")[1];

  fs.readFile(filePath, "utf8", function(err, data){
    if(err){
      res.setHeader('content-type', 'text/plain');
      res.send(404, req.url + " not found");
    } else {
      res.setHeader('Content-Type', 'text/html');
      res.writeHead(200);
      res.end(data);
    }
  });
});

1 个答案:

答案 0 :(得分:1)

我能够使用restify模块中包含的serveStatic

server.get("/safe/endpoint/.*", restify.serveStatic({
  directory: "./UI",
  default: "index.html"
}));

但我需要在UI文件夹中添加前缀文件夹路径:

/UI/safe/endpoint/index.html

但这有一个缺点。请求服务器时,路径需要

example.com/safe/endpoint/

而不是

example.com/safe/endpoint