如何在Express中添加"查看选项"?

Rob*_*tin 3 configuration node.js express

我正在学习使用Express.我想要做:

app.configure(function(){
  app.set('views', __dirname + '/views');
  app.set('view engine', 'jade');
  app.set('view options', { layout: false });    /* asterisk */
  app.use(express.bodyParser());
  app.use(express.methodOverride());
  app.use(app.router);                           /* dagger */
  app.use(express.static(__dirname + '/public'));
});

app.configure('development', function(){
  app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
  app.use(express.logger('dev'));
  app.set('view options', { pretty: true });     /* asterisk */
});
Run Code Online (Sandbox Code Playgroud)

我做的补充是:

  • 对Jade使用'layout:false'.
  • 在Jade中打印HTML.
  • 使用'dev'格式打开记录器

有两个问题:

  1. /* asterisk */当我设置'pretty:true'时,我会覆盖我以前的选项,而不是添加它们.即,我的程序会中断,除非我添加{ pretty: true, layout: false }哪些感觉多余并且不正确.我如何纠正它,以便我只是"修改"视图选项,而不是"定义"它们?

  2. /* dagger */记录器不会确认我的请求,除了/favicon.ico.我发现如果我删除该app.use(app.router);行,那么我会看到两者//favicon.ico.这里发生了什么?

小智 5

从Express 3.x开始,使用app.set('view options')不再是正确的方法. https://github.com/visionmedia/express/wiki/Migrating-from-2.x-to-3.x 这些选项现在在您的app.js使用app.locals中设置为

app.locals.pretty = true;
Run Code Online (Sandbox Code Playgroud)

或者为ejs设置自定义分隔符

app.locals.open = '}}';
app.locals.close = '{{';
Run Code Online (Sandbox Code Playgroud)