在浏览器中使用Node.JS显示json文件,不带文件扩展名

Display json file in Browser using Node.JS without file extension

本文关键字:文件 json 扩展名 显示 JS 浏览器 Node      更新时间:2023-09-26

我使用javascript和Node.js制作了一个服务器,在我的浏览器中显示一个JSON文件。

然而,我想叫网站http://localhost:8888/Test.json没有扩展。例如:http://localhost:8888/Test

这是我的服务器代码:

var     http = require("http"),
        url = require("url"),
        path = require("path"),
        fs = require("fs")
        port = process.argv[2] || 8888;
        file = (__dirname + '/Test.json');
http.createServer(function(req, res) {
  var uri = url.parse(req.url).pathname, filename = path.join(process.cwd(), uri);
  var contentTypesByExtension = {
    '.html': "text/html",
    '.css':  "text/css",
    '.js':   "text/javascript",
    '.json': "application/json" //Edited due to answer - Still no success :(
  };
  path.exists(filename, function(exists) {
    if(!exists) {
      res.writeHead(404, {"Content-Type": "text/plain"});
      res.write("404 Not Found'n");
      res.end();
      return;
    }
    fs.readFile(file, 'utf8', function (err, file) {
            if (err) {
                console.log('Error: ' + err);
            return;
        }
        file = JSON.parse(file);
        console.dir(file);
        var headers = {};
        var contentType = contentTypesByExtension[path.extname(file)];
        if (contentType) headers["Content-Type"] = contentType;
        res.writeHead(200, headers);
        res.write(JSON.stringify(file, 0 ,3));
        res.write
        res.end();
        });    
  });
}).listen(parseInt(port, 10));
console.log("JSON parsing rest server running at'n  => http://localhost:" + 
port + "/'nPress CTRL + C to exit and leave");

我该怎么做呢?我应该坐快车吗?有人有什么建议吗?

提前感谢!

欢呼,弗拉德

您的问题可能是由于内容类型。拥有扩展名。json可能会触发浏览器将其作为application/json消费。因此,如果您删除扩展,您需要添加适当的Content-Type

考虑到你已经在玩内容类型,你不能在这里添加它,并确保你为json写的类型?

  var contentTypesByExtension = {
    '.html': "text/html",
    '.css':  "text/css",
    '.js':   "text/javascript",
    '.json': "application/json" // <---
  };

我刚刚使用了大锤方法,现在注释掉了这个代码片段:

if(!exists) {
      res.writeHead(404, {"Content-Type": "text/plain"});
      res.write("404 Not Found'n");
      res.end();
      return;
    }

现在可以调用:http://localhost:8888/Test

欢呼,弗拉德