【问题标题】:Pug iteration: Cannot read property 'length' of undefined哈巴狗迭代:无法读取未定义的属性“长度”
【发布时间】:2018-10-02 10:09:46
【问题描述】:

我在 js 文件中有以下数据:

let data =[
  {id:1,type:"action"},
  {id:2,type:"comedy"}
];

并尝试使用 pug 模板打印它

doctype html
html
  head
    title= title
    link(rel='stylesheet', href='stylesheets/style.css')
  body

        table
          tr
            th Id
            th Type
          each post in data
            tr
              td #{post.id}
              td #{post.type}
  block content

我在每个帖子行都收到错误为“无法读取未定义的属性'长度'”

app.js:

var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');

var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');

var app = express();
let data =[
  {id:1,type:"action"},
  {id:2,type:"comedy"}
];

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'pug');

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use('/', indexRouter);
app.use('/users', usersRouter);

// catch 404 and forward to error handler
app.use(function(req, res, next) {
  next(createError(404));
});

// error handler
app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render('error');
});

module.exports = app;

index.js:

var express = require('express');
var router = express.Router();

/* GET home page. */
router.get('/', function(req, res, next) {
  res.render('index', { title: 'Movies' });
});

module.exports = router;

【问题讨论】:

  • 请提供您的 ExpressJs 代码
  • 添加了建议

标签: express pug


【解决方案1】:

试试这个:

index.js:

let data =[
  {id:1,type:"action"},
  {id:2,type:"comedy"}
];

/* GET home page. */
router.get('/', function(req, res, next) {
  res.render('index', { title: 'Movies', data }); // you forgot passing the data array
})

另一种解决方案是:

在app.js,你可以这样做:

var app = express();
let data =[
  {id:1,type:"action"},
  {id:2,type:"comedy"}
];
app.locals.data = data; //added 

现在您可以访问应用程序中呈现的模板中的局部变量,这意味着您无需在 render() 方法中传递此 data

【讨论】:

  • 尝试将您的data 移动到index.js 文件
  • 如果我把它移到 index.js 就可以了。但是我怎样才能从 app.js 访问它呢?
  • 导出然后包含在文件中?这些是 js 基础。
  • 或者如果我必须从 json 文件中访问数据?
  • @MohammedAjmal in app.js 你可以设置app.locals.data = data 并在index.js 中获取它。有关更多信息,请参阅:Documentation
猜你喜欢
  • 2019-12-17
  • 2018-01-23
  • 1970-01-01
  • 1970-01-01
  • 2017-07-13
  • 1970-01-01
  • 1970-01-01
  • 2011-11-01
  • 1970-01-01
相关资源
最近更新 更多