Kesalahan saat merender daftar dengan Pug dan ExpressJS

Halo Saya cukup baru mengenal Node, express, dan pug. Saya mencoba merender objek ke tampilan dan saya menerima kesalahan pug, Atau setidaknya menurut saya itu adalah kesalahan pug. Saya menggunakan pugcli dan ketika mencoba merender html saya mendapatkan kesalahan.

Kesalahan pugcli ditampilkan di terminal sebagai:

Tidak dapat membaca 'panjang' properti yang tidak ditentukan

Ini aneh karena ketika saya mencoba melihatnya di browser meskipun pug cli menunjukkan kesalahan, browser menampilkan daftar tetapi semua elemen <li> kosong.

Saya ingin <li> menampilkan id objek, nama, dan umur

Saya memahami bahwa di pug untuk merender suatu objek Anda harus mengulanginya dengan semacam loop for. Saya telah menulisnya di file pug tetapi objeknya tidak dirender.

Saya akan sangat menghargai bantuan tentang apa yang saya lewatkan dalam kode atau apakah saya benar-benar mengacaukan kodenya?

Pengaturan saya adalah sebagai berikut

bin/www
public
   javascripts
   stylesheets
routes
   index.js
views
   index.pug
   layout.pug
   ...
app.js

Index.pug saya adalah:

extends layout
block content
  h1= title
  p Welcome to #{appHeading}
  div
    ul
      for user, i in users
        li= users.name +" - "+ users.id
      li=number

Ini adalah index.js saya:

var express = require('express');
var router = express.Router();
var users = [
  {
    id: 0,
    name: 'Glenn',
    age: 40
  },
  {
    id: 1,
    name: 'Jeff',
    age: 37
  },
  {
    id: 2,
    name: 'Sara',
    age: 22
  },
  {
    id: 3,
    name: 'Bill',
    age: 41
  },
  {
    id: 4,
    name: 'Mary',
    age: 29
  },

];
var appHeading = 'my object render app ' 
var number = 42;
/* GET home page. */
router.get('/', function(req, res, next) {

  //res.json(users);
  //res.send('Is this working?')
  res.render('index', { 
    title: 'This is my app to render objects in pug',
    users,
    number,
    appHeading
  });
});
module.exports = router;

dan app.js saya adalah:

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

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

const app = express();

/*const logging = function(req, res, next){
  console.log('Logging....')
  next();
}
*/
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'pug');

app.use(logger('dev'));
//Body Parser middleware
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended : false}));
//app.use(express.json());
//app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
//app.use(logging);
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');
});


app.listen(port=3000 , function(){
  console.log('Server started on port '+ port);
})
module.exports = app;

person digitalguru    schedule 15.11.2018    source sumber
comment
Selamat datang di StackOverflow Saya harap kami dapat membantu Anda menemukan jawaban yang Anda cari. Apa yang ditampilkan ketika Anda memasukkan !{JSON.stringify(users)} ke dalam template Anda?   -  person Juan D. Gómez    schedule 15.11.2018
comment
@ JuanD.Gómez Terima kasih atas bantuan Anda. Saya mencoba bermain-main json.stringify. Saya menambahkan !{JSON.stringify(users)} ke file pug dan itu membuat kesalahan dalam render atau halaman. Itu tidak menyukai kode di file pug. Saya mencobanya di file js dan tidak menghasilkan apa-apa. Saya selanjutnya bermain dengan ti dan itu mengubah objek menjadi string. Saya tidak bisa lagi menelepon sesuatu seperti users.id dan mendapatkan id. Itu menjadi string lengkap yang harus saya uraikan sepenuhnya. ini tidak akan berhasil. Saya akan sangat menghargai bantuan lainnya.   -  person digitalguru    schedule 15.11.2018
comment
@Graham Terima kasih atas saran Anda tetapi saya mencoba memperluas kode seperti yang Anda sarankan dan tidak melakukan apa pun, saya juga mengeluarkan variabel kecuali pengguna dan masalahnya tetap ada. Saya menemukan bahwa kesalahan Tidak dapat membaca properti 'panjang' yang tidak ditentukan berasal dari baris 9 di indeks.pug barisnya adalah for user, i in users. Saya menghargai bantuan apa pun.   -  person digitalguru    schedule 15.11.2018
comment
Apakah variabel Anda yang lain diteruskan ke templat? Maksud saya, bisakah Anda mengakses variabel lain yang Anda berikan di template?. Tujuan penggunaan !{JSON.stringify(users)} adalah untuk men-debug dan memeriksa apakah array pengguna diteruskan dengan benar. Jadi, Anda tidak perlu menyimpan kode ini di templat, cukup periksa apakah nilainya sudah benar lalu hapus.   -  person Juan D. Gómez    schedule 15.11.2018
comment
Saya memilih untuk menutup pertanyaan ini karena kesalahan ketik kecil (users vs. user).   -  person Graham    schedule 15.11.2018
comment
@digitalguru harap pertimbangkan untuk menghapus pertanyaan ini, lihat ini untuk referensi.   -  person Graham    schedule 15.11.2018


Jawaban (1)


Sepertinya itu salah ketik:

extends layout
block content
  h1= title
  p Welcome to #{appHeading}
  div
    ul
      for user, i in users
        li= user.name +" - "+ user.id
      li=number

Ini akan berhasil. Apa yang terjadi adalah Anda mengakses users (array) dan bukan user (objek yang diulang). Saya sudah mencoba kode di mesin saya dan berfungsi dengan baik.

person Juan D. Gómez    schedule 15.11.2018
comment
Terima kasih atas jawabannya. Saya relatif baru dalam hal ini dan saya bingung item mana yang perlu saya hubungi. Saya melihatnya lebih jelas sekarang!!!! Saya berterima kasih kepada komunitas. Terima kasih semuanya - person digitalguru; 15.11.2018