【问题标题】:Cannot read property 'toastr' of undefined无法读取未定义的属性“toastr”
【发布时间】:2018-04-16 01:18:09
【问题描述】:

我一直在尝试在我的 express js 表单中实现 express-toastr,并使用它来发送 express-validator 错误消息作为 toast 通知,但是当我将所需的 div #{req.toastr.render()} 放入我的 index.pug 文件中时,我收到了尝试加载页面时出现错误Cannot read property 'toastr' of undefined

完全错误:

        TypeError: /home/bob/project/views/index.pug:34
    32|         h1(class="section__title") Title1
    33|         div(class="centerBlock") 
> 34|           div #{req.toastr.render()}
    35|             .col-xs-12
    36|               form(action='', method='post', id='form')
    37|                 .row

Cannot read property 'toastr' of undefined
    at eval (eval at wrap (/home/bob/project/node_modules/pug-runtime/wrap.js:6:10), <anonymous>:117:61)
    at template (eval at wrap (/home/bob/project/node_modules/pug-runtime/wrap.js:6:10), <anonymous>:245:131)
    at Object.exports.renderFile (/home/bob/project/node_modules/pug/lib/index.js:428:38)
    at Object.exports.renderFile (/home/bob/project/node_modules/pug/lib/index.js:418:21)
    at View.exports.__express [as engine] (/home/bob/project/node_modules/pug/lib/index.js:465:11)
    at View.render (/home/bob/project/node_modules/express/lib/view.js:135:8)
    at tryRender (/home/bob/project/node_modules/express/lib/application.js:640:10)
    at Function.render (/home/bob/project/node_modules/express/lib/application.js:592:3)
    at ServerResponse.render (/home/bob/project/node_modules/express/lib/response.js:1008:7)
    at /home/bob/project/routes/index.js:19:7
    at Layer.handle [as handle_request] (/home/bob/project/node_modules/express/lib/router/layer.js:95:5)
    at next (/home/bob/project/node_modules/express/lib/router/route.js:137:13)
    at Route.dispatch (/home/bob/project/node_modules/express/lib/router/route.js:112:3)
    at Layer.handle [as handle_request] (/home/bob/project/node_modules/express/lib/router/layer.js:95:5)
    at /home/bob/project/node_modules/express/lib/router/index.js:281:22
    at Function.process_params (/home/bob/project/node_modules/express/lib/router/index.js:335:12)

我的layout.pug如下:

link(rel="stylesheet" href="/css/toastr.css")
script(src="/js/jquery.js")
script(src="/js/toastr.js")

还有我的 app.js:

var cookieParser = require('cookie-parser');
var session = require('express-session');
var flash = require('connect-flash');
var toastr = require('express-toastr');

var index = require('./routes/index');

var app = express();
app.use(cookieParser('secret'));
app.use(session({
    secret: 'secret',
    saveUninitialized: true,
    resave: true
}));
app.use(flash());
app.use(toastr());

app.use('/js', express.static(__dirname + 
'/node_modules/jquery/dist')); // redirect JS jQuery + toastr.js is in this folder
app.use('/css', express.static(__dirname + 
'/node_modules/bootstrap/dist/css')); // redirect CSS bootstrap;

index.js:

router.get('/', function(req, res, next) {
res.render('index', { title: 'Project' });
});

router.post('/', function(req, res){

var errors = req.getValidationResult();

if (errors){
    for (error in errors){
      req.toastr.error(error.msg)
    }
    res.redirect(req.get('referer'));
    return;
  }
})

我对 nodejs 比较陌生,但到目前为止我一直在管理,但是我已经尝试过并且无法弄清楚为什么这不起作用。如果我遗漏了一些非常简单的东西,请道歉。

干杯, 凯尔。

【问题讨论】:

  • 你有一个目录设置来服务你的静态文件吗? CSS、JS、图片等expressjs.com/en/starter/static-files.html
  • 是的,我只是没有将它包含在 app.js 快照中以节省空间。我会更新问题。
  • 您在哪里将req 传递到您的视图中?
  • 抱歉,哪里可以这样做?
  • index.js 中是否有所有代码?我想肯定有另一条路线喜欢 req.get('/') 并将调用 res.render 方法并传递给 req对象作为参数。

标签: node.js express undefined toastr


【解决方案1】:

问题是您没有传递 req 对象来查看渲染函数。 将 index.jsget 方法更改为:

router.get('/', function(req, res, next) {
    res.render('index', { 
        title: 'Project',
        req: req });
});

更多使用文档可以查看here

【讨论】:

  • 我已更改此设置,但错误仍然存​​在。将div #{req.toastr.render()} 添加到模板文件后,整个网站无法加载
  • 忽略最后一条评论,我打错了:P,现在加载正常。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-06
  • 2020-10-30
  • 2019-10-09
  • 1970-01-01
相关资源
最近更新 更多