Home > OS >  ReferenceError when trying to use a variable in an EJS template file
ReferenceError when trying to use a variable in an EJS template file

Time:01-11

I'm having a heap of trouble just trying to get an EJS template file to recognise a variable that stores the rows of an SQLite3 table query in a corresponding .js file. I get a ReferenceError for the variable I used in the EJS file when launching the server and trying to access that route.

For context it's a micro blog project where I'd like authors to have the ability to save draft articles in to a database and for the user to be able to come back and modify or publish them later.

Here's my 'author.js' file:

// Author Page
const express = require("express");
const router = express.Router();
const assert = require('assert');

/**
 * @desc retrieves draft articles
 */
router.get("/author-home", (req, res, next) => {

    //Use this pattern to retrieve data
    //NB. it's better NOT to use arrow functions for callbacks with this library
    global.db.all("SELECT * FROM draftArticles", function (err, rows) {
      if (err) {
        next(err); //send the error on to the error handler
      } else {
        res.json(rows);
      }
    });
});


/**
 * @desc Renders the author page
 */
router.get("/author", (req, res) => {
    res.render("author-home", data);
  });


module.exports = router;

In my 'author-home.ejs' file, I'm trying to insert various article properties in a element like so:

<td><% data[0].article_title %> </td>
<td><% data[0].article_subtitle %> </td>

...etc.

Can anyone tell me what I'm doing wrong? I can also post the code for my 'index.js' file if that's helpful. Many thanks in advance

CodePudding user response:

This is because you have not defined "data". You need to define it if you want to send an array you can use How can I pass an array to an ejs template in express?

CodePudding user response:

Try to change your /author-home end-point and render the data from there:

router.get('/author-home', (req, res, next) => {
  global.db.all('SELECT * FROM draftArticles', function (err, rows) {
    if (err) {
      next(err); //send the error on to the error handler
      return;
    }

    res.render('author-home', { data: rows });
  });
});
  • Related