0

我有这个在app.js...

    var koa = require('koa');
    var locals = require('koa-locals');
    var jade = require('koa-jade');

    var app = koa();

    locals(app, {
        moment: require('moment'),
        _: require('lodash')
    });

    app.use(jade.middleware({
       viewPath: __dirname + '/views',
       debug: true,
       pretty: true,
       compileDebug: false,
       locals: this.locals
   }));

你已经猜到了,moment在视图中是未定义的。

我错过了什么?顺便说一句,为什么 koa-local 的文档在示例中有奇怪的要求......

var locals = require('../'); 
4

2 回答 2

0

真的,我从未使用过 koa-locals,但目前您可以使用 koa状态的内置功能将数据传递到您的视图。

this.state.utils = {
    moment: require('moment'),
    _: require('lodash')
};
于 2015-04-09T03:22:15.737 回答
0

在您调用app.use(jade.middleware({时,this.locals指的是global对象。您不在中间件闭包内,您只是在使用this( global) 并且从未在global对象上定义本地变量(预期)。

也许只是传递你给的同一个koa-locals对象jade.middleware

var koa = require('koa');
var locals = require('koa-locals');
var jade = require('koa-jade');

var app = koa();
var helpers = {
  moment: require('moment'),
  _: require('lodash')
};

locals(app, helpers);

app.use(jade.middleware({
   viewPath: __dirname + '/views',
   debug: true,
   pretty: true,
   compileDebug: false,
   locals: helpers
}));
于 2016-04-22T01:33:09.357 回答