【发布时间】:2012-09-24 01:30:08
【问题描述】:
我在快速获取.json 文件并在视图中显示时遇到问题。请分享您的示例。
【问题讨论】:
标签: node.js
我在快速获取.json 文件并在视图中显示时遇到问题。请分享您的示例。
【问题讨论】:
标签: node.js
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')一样
fs.readFile() 与 require() 不同。如果您尝试使用fs.readFile() 两次读取文件,您将在内存中获得两个不同的指针。但是如果你 require() 使用相同的字符串,由于required() 的缓存行为,你将指向内存中的同一个对象。这可能会导致意想不到的结果:当修改第一个指针引用的对象时,意外更改了第二个指针修改的对象。
require 不同。 require 会在动态生成的文件上抛出错误
require 将在应用启动时将所有大文件加载到内存中,即使它们在一段时间内从未被调用或需要。
在你的控制器中做这样的事情。
获取 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 文件所做的任何更改都不会反映在服务器的后续响应中。
【讨论】:
./
这个对我有用。使用 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);
});
【讨论】:
if(err) { throw err; } SyntaxError: Unexpected token }