0

I'm a beginner to programming here and I'm trying to render a POST data by /admin.ejs to /home.ejs. I pasted the data on admin page and it's working but when I try to render to home page it say the data is not defined: /`thank you in advance .

paths

-model
--input.js
-routes
--adminRouter.js
--indexRouter.js
-views
--admin
---admin.ejs
--partials
---header.ejs
---footer.ejs
--home.ejs
-index.js

adminRouter.js

probably my misstake is here

const   express       =   require("express"),
        session       =   require('express-session'),
        bodyParser        =   require("body-parser"),
        app               =   express(),
        router        =   express.Router();


/////yancilar//////
var jsonParser = bodyParser.json();
var urlencodedParser = bodyParser.urlencoded({ extended: false });
app.set("view engine","ejs" );

///////////////
router.get('/admin', (req, res)=>{

    res.render('admin/admin');
});
router.post('/admin',urlencodedParser, (req, res)=>{
     console.log(req.body); 
     const data = req.body.input ;
     res.render('home', {data : data});
     console.log(data);


});  

home.ejs

        <% include ./partials/header %>

    <div class="container">


            <h1 class="my-4 text-center text-lg-left">Thumbnail Gallery</h1>

            <div class="row text-center text-lg-left">

              <div class="col-lg-3 col-md-4 col-xs-6">

                <a href='' class="d-block mb-4 h-100 ">

                    <% if (data) { %>
                      <h2><%- data %></h2>
                  <% } %>

                  <img class="img-fluid img-thumbnail"  src="" alt="">

                </a>

              </div>

            </div>

          </div>

    <% include ./partials/footer %>

index.js

const mongoose          =   require("mongoose"),
      express           =   require("express"),
      app               =   express(),
      input             =   require("./models/input"),
      bodyParser        =   require("body-parser"),
      passport          =   require("passport"),
      expressSession    =   require("express-session"),
      LocalStrategy     =   require("passport-local");

///pass////
app.use(passport.initialize());
app.use(passport.session());
//passport.use(new LocalStrategy(input.authenticate()));
//passport.serializeUser(input.serializeUser());
//passport.deserializeUser(input.deserializeUser());


////Routes///////////////////
const indexRouter = require("./routes/indexRouter");
const adminRouter = require("./routes/adminRouter");

///App Config////////////////
app.set("view engine","ejs" );
app.use(express.static("public"));
mongoose.connect('mongodb://localhost/game');
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());

/////routers use ////////////
app.use(adminRouter);
app.use(indexRouter);

admin.ejs

<% include ../partials/header %>
  <form action="admin" method="POST" >
    <label class="sr-only" for="input">Name</label>
    <input type="text" class="form-control mb-2 mr-sm-2 mb-sm-0" id="input" placeholder="Jane Doe" name="input" />
    <label class="sr-only" for="inlineFormInputGroup">Username</label>
    <div class="form-check mb-2 mr-sm-2 mb-sm-0">

    </div>
    <button type="submit" class="btn btn-primary">Submit</button>
  </form>


      <div>

      </div>
  <% include ../partials/footer %>

indexRouter

const   express       =   require("express"),
        router        =   express.Router(),
        app           =   express();

router.get('/', function(req, res) {
    res.render('home');  
});


module.exports = router;
Thomas
  • 103
  • 5
  • data is not being set. – thomann061 Mar 06 '18 at 21:15
  • Does this answer your question? [node ejs reference error data not defined at eval when handing data to view](https://stackoverflow.com/questions/27278565/node-ejs-reference-error-data-not-defined-at-eval-when-handing-data-to-view) – Luca Fagioli Feb 18 '21 at 09:50

1 Answers1

0

Just because you POST the data to /admin and render the homepage with that data, doesn't mean the data will persist when you navigate to /home.

Look at your route here. No data is being passed to home.

router.get('/', function(req, res) {
    res.render('home');  
});

You could use a database, mongoose is a common one:

router.post('/admin', urlencodedParser, (req, res) => {
  const data = req.body.input ;
  // instead of calling res.render();
  // store it in a database here
});

Then you can retrieve the data and pass it to any route.

router.get('/', function(req, res) {
  // query the database here
  // const data = database.query();
  res.render('home', {data: data} );  
});
thomann061
  • 629
  • 3
  • 11