【问题标题】:How to get a json file in express js and display in view如何在express js中获取json文件并显示在视图中
【发布时间】:2012-09-24 01:30:08
【问题描述】:

我在快速获取.json 文件并在视图中显示时遇到问题。请分享您的示例。

【问题讨论】:

    标签: node.js


    【解决方案1】:
    var fs = require("fs"),
        json;
    
    function readJsonFileSync(filepath, encoding){
    
        if (typeof (encoding) == 'undefined'){
            encoding = 'utf8';
        }
        var file = fs.readFileSync(filepath, encoding);
        return JSON.parse(file);
    }
    
    function getConfig(file){
    
        var filepath = __dirname + '/' + file;
        return readJsonFileSync(filepath);
    }
    
    //assume that config.json is in application root
    
    json = getConfig('config.json');
    

    【讨论】:

    • 这个和require('./config.json')一样
    • 这与低于 v0.5.x 的 node.js 版本有关 stackoverflow.com/questions/7163061/…
    • fs.readFile()require() 不同。如果您尝试使用fs.readFile() 两次读取文件,您将在内存中获得两个不同的指针。但是如果你 require() 使用相同的字符串,由于required() 的缓存行为,你将指向内存中的同一个对象。这可能会导致意想不到的结果:当修改第一个指针引用的对象时,意外更改了第二个指针修改的对象。
    • @Blowsie 这与require 不同。 require 会在动态生成的文件上抛出错误
    • require 将在应用启动时将所有大文件加载到内存中,即使它们在一段时间内从未被调用或需要。
    【解决方案2】:

    在你的控制器中做这样的事情。

    获取 json 文件的内容:

    ES5 var foo = require('./path/to/your/file.json');

    ES6 import foo from './path/to/your/file.json';

    发送 json 到您的视图:

    function getJson(req, res, next){
        res.send(foo);
    }
    

    这应该通过请求将 json 内容发送到您的视图。

    注意

    根据BTMPL

    虽然这会起作用,但请注意 require 调用会被缓存,并且会在每个后续调用中返回相同的对象。您在服务器运行时对 .json 文件所做的任何更改都不会反映在服务器的后续响应中。

    【讨论】:

    • 请注意,对于本地文件,您需要将前面的点/斜杠附加到要求./
    【解决方案3】:

    这个对我有用。使用 fs 模块:

    var fs = require('fs');
    
    function readJSONFile(filename, callback) {
      fs.readFile(filename, function (err, data) {
        if(err) {
          callback(err);
          return;
        }
        try {
          callback(null, JSON.parse(data));
        } catch(exception) {
          callback(exception);
        }
      });
    }
    

    用法:

    readJSONFile('../../data.json', function (err, json) {
      if(err) { throw err; }
      console.log(json);
    });
    

    Source

    【讨论】:

    • 我正在使用这个并得到if(err) { throw err; } SyntaxError: Unexpected token }
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-01
    • 2018-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-15
    相关资源
    最近更新 更多