【问题标题】:Koa-locals not workingKoa 本地人不工作
【发布时间】:2014-12-01 18:33:46
【问题描述】:

我有这个在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 的 documentation 在示例中有奇怪的要求...

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

【问题讨论】:

  • 尝试调试第二个中间件(jade 中间件)中this.locals 的值。此外,该模块似乎在此频道koa:locals 上进行调试,因此在使用DEBUG=koa:locals node --harmony app.js 运行节点命令时您能看到任何问题吗?该模块使用了一种不太理想的方式将app.ctxctx.request 上的.locals 访问器委托给app.locals,并且根据jade 对locals 选项的作用,可能会遇到一些问题。

标签: node.js koa


【解决方案1】:

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

this.state.utils = {
    moment: require('moment'),
    _: require('lodash')
};

【讨论】:

    【解决方案2】:

    在您调用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
    }));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-18
      • 2021-05-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-27
      • 2020-02-02
      相关资源
      最近更新 更多