locals.pretty in Express 4

12
我想使用 Express 4 发送漂亮的 HTML。我如何在 Express 4 中使用 app.locals.pretty?旧的语法不起作用: app.locals.pretty = true; 整个代码块:
app.set('port', process.env.PORT || 1339);
app.set('views', __dirname + '/app/views');
app.set('view engine', 'jade');
app.set('view options', { layout: false });

app.use(favicon(__dirname + '/public/favicon.ico'));
app.use(morgan());
app.use(bodyParser());
app.use(methodOverride());
app.use(cookieParser('123'));

app.use(session({
    secret: '123',
    maxAge: new Date(Date.now() + 3600000),
    store: SessionStore
}));

app.use(passport.initialize());
app.use(passport.session());
app.use(express.static(path.join(__dirname, 'public')));

var env = process.env.NODE_ENV || 'development';
if ('development' == env) {
    app.locals.pretty = true;
}

你能展示一下你配置应用程序的整个代码块吗?pretty:true实际上是Jade选项,在4.x版本中没有提到更改它。 - raina77ow
@raina77ow,我更新了我的问题。我不使用Jade的render函数,我只是使用res.send()发送JSON,这在我的API中使用。 - user3215609
这实际上是Express的render函数,但这只是小问题。 res.send()不使用本地变量 - 只有res.render()send只是发送您提供的任何数据。 - Scimonster
@Scimonster,我该如何发送漂亮的JSON?我使用的是Express 3,一切都很正常,但更新到Express 4后就不行了。 - user3215609
1个回答

41

如果你想美化显示JSON格式,你可以设置缩进的空格数量来启用美化显示:

app.set('json spaces', 2);

然后只需要执行:

res.json({ foo: 'bar', baz: 1234567890 });

同样地,你可以使用app.set('json replacer', function(..){...});来设置底层使用的JSON.stringify函数的replacer参数。

更新:就HTML的美化而言,我不认为Express内置了任何内容。


嘿 @mscdex,这个解决方案非常适合漂亮地打印HTML。谢谢! - Jobsamuel
我不明白为什么你要将这个作为应用程序的一个特性。通过添加额外的间距,你正在增加JSON负载的大小。 - sctskw
@sctskw 假设你只在开发模式下拥有那个 app.set() - mscdex
我仍然认为美化输出不是你的应用程序的工作,这是你正在使用的查看器的工作。而且有很多种方法可以实现这一点。 - sctskw
谢谢,这正是我所需要的——可读的 JSON 格式,而不是压缩过的。 - Vladimir Jovanović

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接