node js routing not rendering

user3615856

I was trying to implement a website where there is a driver and passenger(carpool). So when a driver gives his details and clicks submit he goes to a URL (select) where he can choose the passenger which he wants.

I have written the following snippet:-

app.post('/passenger',function(req,res){
        var user = new User({profile:{name:req.body.uname},
        type:"passenger",
        phone_no:req.body.contact,
        origin:{city:req.body.pick},
        destination:{city:req.body.drop}
      //  email:req.body.email,
    //    password:req.body.password
    })
        user.save();
        res.redirect('/');
    });     

app.post('/driver',function(req,res){
        var user = new User({profile:{name:req.body.uname},
        type:"driver",
        phone_no:req.body.contact,
        origin:{city:req.body.pick},
        destination:{city:req.body.drop}
      //  email:req.body.email,
    //    password:req.body.password
    })
            user.save();
            console.log("heyyyy")
            res.redirect('/select');

    });

app.get('/select',function(req,res){
    // User.find(function(err,type){
 //            res.render('select',{type:type});
 //        });
    if (req.user){
        console.log("U are inside")
    if(req.user.type="passenger")
    {
      res.render('select');
    }
    else{
        res.send("You ar not admin");
    }
}
   console.log("u are outside")
   console.log(req.body.uname)
   console.log()     
 });

The values are getting saved in the database but I am not able to retrieve the information (i.e. the list of all the passengers).

I am not able to process it (i.e. giving error).

Please help me out..

Wilson

It is hard to pinpoint the source of the problem without knowing how you are configuring your express server anyway I have created an example based on your context.

app.js file:

var express = require('express');
var app = express();
var bodyParser = require('body-parser');
var engine = require('ejs-locals');
var querystring = require('querystring');

var drivers = [];

var passengers = [{name: 'Wilson'}, {name: 'Raul'}];

app.engine('ejs', engine);
app.set('view engine', 'ejs');

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

app.get('/', function(req, res) {
  res.render('driver');
});

app.post('/driver', function(req, res) {
  var driver = {
    name: req.body.name,
    age: req.body.age
  };

  drivers.push(driver);

  var data = {
    driver: driver,
    passengers: passengers
  };

  res.render('passengers', data);
});

app.get('/result', function(req, res) {
  var data = {
    driverName: '',
    passengerNames: []
  };

  data.driverName = req.query.driverName;
  data.passengerNames = data.passengerNames.concat(req.query.passengerNames);

  res.render('result', data);
});

app.post('/api/passengers', function(req, res) {
  var data = {
    passengerNames: req.body.passengerNames,
    driverName: req.body.driverName
  };

  var qs = querystring.stringify(data);
  res.redirect('/result?' + qs);
});

app.listen(4040, function() {
  console.log('server up and running at port 4040');
});

views/layout.ejs file:

<!doctype html>
<html>
  <head>
    <title>Drivers App</title>
  </head>
  <body>
    <div id="app">
       <%- body %>
    </div>
    <script>
        document.addEventListener('DOMContentLoaded', function(e) {

        var btnNext = document.getElementById('btnNext');
        btnNext.onclick = function(e) {                   
            var allPassengers = document.querySelectorAll('input[type=checkbox]');
            var selectedPassengers = [].filter.call(allPassengers, function(p) {
              return p.checked;
            });

            var passengerNames = [].map.call(selectedPassengers, function(p) {
              return p.value;
            });

            var driverName = document.getElementById('driverName').innerHTML;

            var r = new XMLHttpRequest();
            r.open('POST', '/api/passengers');
            r.setRequestHeader('Content-type', 'application/json;charset=UTF-8');
            r.onreadystatechange = function() {
              if (r.readyState != 4 || r.status != 200) return;
              document.getElementById('app').innerHTML = r.responseText;
            };

            r.send(JSON.stringify({
              passengerNames: passengerNames,
              driverName: driverName
            }));
        };

      });
    </script>
  </body>
</html>

views/driver.ejs file:

<% layout('layout.ejs') -%>

<h1> Driver </h1>

<form method="POST" action="/driver">
  <label>Name:</label>
  <input id="name" name="name" type="text"/>
  <br />

  <label>Age:</label>
  <input id="age" name="age" type="text"/>
  <br />
  <br />

  <input type="submit" value="Submit" />
</form>

`views/passengers.ejs`

<% layout('layout') -%>

<h1> Driver </h1>
<p>Name: <span id="driverName"><%= driver.name%></span></p>

<h1> Passengers </h1>
<% passengers.forEach(function(p) {%>
   <input type="checkbox" value=<%= p.name %> /> <%= p.name %> <br />
<% }); %>

<br />
<button id="btnNext">Next</button>

views/result.ejs file:

<h1>Success!</h1>

<h2>Driver</h2>
<h3><%= driverName %></h3>
<br />
<h2>Selected Passengers</h2>
<% passengerNames.forEach(function(name) { %>
  <h3><%= name%></h3>
<% }); %>

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사