ReferenceError: D:\nodejs\crud\views\employee\list.ejs:21

筅森魡賤 提交于 2019-12-13 03:07:33

问题


hi m trying to get the data from database (MongoDB) using ejs as view-engine, but it shows error:

ReferenceError: D:\nodejs\crud\views\employee\list.ejs:21,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,

list.ejs:

<tbody>
<% employees.forEach(function (employees) { %>
<tr>
  <td><%= employees.fullname %></td>
  <td><%= employees.email %></td>
  <td><%= employees.mobile %></td>
  <td><%= employees.city %></td>
  <td>
    <a href="/show" class="btn btn-outline-info my-2 my-sm-0">Show</a>
    <a href="/edit" class="btn btn-outline-warning my-2 my-sm-0">Edit</a>
    <a href="" class="btn btn-outline-danger my-2 my-sm-0">Delete</a>
  </td>
</tr>
<% }) %>

complete error code:

  ReferenceError: D:\nodejs\crud\views\employee\list.ejs:21
  19|   </thead>
  20|   <tbody>
  >>   21|     <% employees.forEach(function (employees) { %>
       22|     <tr>
       23|       <td><%= employees.fullname %></td>
       24|       <td><%= employees.email %></td>

  employees is not defined
      at eval (eval at compile 
  (D:\nodejs\crud\node_modules\ejs\lib\ejs.js:633:12), <anonymous>:11:8)
  at returnedFn (D:\nodejs\crud\node_modules\ejs\lib\ejs.js:668:17)
  at tryHandleCache (D:\nodejs\crud\node_modules\ejs\lib\ejs.js:254:36)
  at View.exports.renderFile [as engine]       
  (D:\nodejs\crud\node_modules\ejs\lib\ejs.js:485:10)
  at View.render (D:\nodejs\crud\node_modules\express\lib\view.js:135:8)
  at tryRender 
  (D:\nodejs\crud\node_modules\express\lib\application.js:640:10)
  at Function.render 
  (D:\nodejs\crud\node_modules\express\lib\application.js:592:3)
  at ServerResponse.render 
  (D:\nodejs\crud\node_modules\express\lib\response.js:1012:7)
  at ServerResponse.res.render (D:\nodejs\crud\node_modules\express-ejs-
  layouts\lib\express-layouts.js:77:18)
 at Employee.find (D:\nodejs\crud\controllers\employeeController.js:32:8)
 at D:\nodejs\crud\node_modules\mongoose\lib\model.js:4581:16
 at D:\nodejs\crud\node_modules\mongoose\lib\query.js:4315:12
 at process.nextTick 
  (D:\nodejs\crud\node_modules\mongoose\lib\helpers\query\completeMany.js:35:39)
at process._tickCallback (internal/process/next_tick.js:61:11)

server.js:

  require('./models/db');
  require('./models/employee.model');

  const express = require('express');
  const mongoose = require('mongoose');
  const expressLayouts = require('express-ejs-layouts');
  const bodyParser = require('body-parser');
  const path = require('path');

  const employeeController = require('./controllers/employeeController');

  var app = express();

  app.use(bodyParser.urlencoded({ extended: true }))
  app.use(bodyParser.json())

  //EJS
  app.use(expressLayouts);
  app.set('view engine','ejs');

  app.listen(3000, () => {
      console.log('Express server started at port : 3000');
  });

  app.use('/employee', employeeController);

employeeController.js:

  const express = require('express');
  var router = express.Router();
  const mongoose = require('mongoose');
  const Employee = mongoose.model('Employee');

  router.get('/',(req, res) => {
res.render("employee/addOrEdit");
  });

  router.post('/',(req, res) => {
insertRecord(req, res);
  });

  function insertRecord(req, res) {
      var employee = new Employee();
      employee.fullName = req.body.fullname;
      employee.email = req.body.email;
      employee.mobile = req.body.mobile;
      employee.city = req.body.city;
      employee.save((err, doc) => {
    if (!err)
      res.redirect('employee/list');
    else {
        console.log('Error during record insertions : ' + err);
          }
      });
  }

  router.get('/list', (req, res) => {
      Employee.find((err, docs) => {
    if (!err) {
        res.render("employee/list", {
            list: docs
        });
    } else {
        console.log('Error in retrieving employee list :' + err);
    }
});
  });

  module.exports = router;

回答1:


Can you share the node js server-side code of it, from where you are sending res.render("list");. It would be a lot more helpful to check if you are sending employees from the server-side.

Also, make sure that you are sending the employees information to the view like this,

res.render("list", {employees: employeeData});



回答2:


Some Scenarios that will creates the issue :- 1. you are passing some another value from server. if so then you need to change that res.render("list", {employees: employeeData}); 2. you need to check that the array value is not empty in .ejs page if (employeeData) {

<% if (employeeData) { %>
<tbody>
  <% employees.forEach(function (employees) { %>
  <tr>
    <td><%= employees.fullname %></td>
    <td><%= employees.email %></td>
    <td><%= employees.mobile %></td>
    <td><%= employees.city %></td>
    <td>
      <a href="/show" class="btn btn-outline-info my-2 my-sm-0">Show</a>
      <a href="/edit" class="btn btn-outline-warning my-2 my-sm-0">Edit</a>
      <a href="" class="btn btn-outline-danger my-2 my-sm-0">Delete</a>
    </td>
  </tr>
  <% }) %>
  <% } %>

Note:- As I don't know the code I have given solution from scenarios.



来源:https://stackoverflow.com/questions/57602722/referenceerror-d-nodejs-crud-views-employee-list-ejs21

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!