Перенаправление на другой маршрут и возможность передавать _id в качестве параметра в NodeJS - PullRequest
0 голосов
/ 26 сентября 2019

Я только что начал с NodeJS, в настоящее время я делаю простой веб-сайт, где вы найдете на странице приветствия количество карт (загрузочных карт), каждая карта представляет город, а каждый город - объект, хранящийся в базе данных (mongodb), и* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * теперь все равно выглядит так: '1006 *' страница приветствия ”:

<!-- welcome page -->
<!-- styles -->
<link rel="stylesheet" href="/css/welcome.css">
<!-- html -->
<% include ./partials/navbar %>
<div class="row">
    <% for (city of data) { %>
        <div class="col-sm-4">
            <div class="card">
                <img src="/images/nyc2.jpg" class="card-img-top" alt="New York City">
                <div class="card-body">
                    <h5 class="card-title">
                        <%= city.name %>
                    </h5>
                    <p class="card-text">
                        <%= city.description %>
                    </p>
                </div>
                <div class="card-footer">
                    <small class="text-muted"> <a href="/cities/<%= city._id%>">Read more .. </a></small>
                </div>
            </div>
        </div>
    <% } %>
</div>

Итак, идея заключается в том, что я получаю города из базы данных, а затем выпускаю их в виде карточек, но я хочу, чтобы пользователь нажал Подробнее ..., чтобы отвезти их на другую страницу, где они могут прочитать больше информации об этом же городе, и для этой цели я проложил маршрут towns.js , например:

// cities routes

// express 
const express = require('express');   
const router = express.Router();

// load city model
const City = require('../models/City');

// cities page render
router.get('/:id' , (req ,res) => {
    const _id = req.params.id;
    City.findOne({_id : _id} , (err , data) => {
        if(err) throw err;
        // view render and pass the data to the view
        res.render('city' , {
            name : data.name ,
            info : data.info
        });
    });

});


// export the router
module.exports = router;

Наконец, я получаю следующую ошибку:

events.js:174
      throw er; // Unhandled 'error' event
      ^
TypeError: Cannot read property 'name' of null
    at City.findOne (C:\Users\User\Desktop\NodeProje
cts\Citty\routes\cities.js:17:25)
    at C:\Users\User\Desktop\NodeProjects\Citty\node
_modules\mongoose\lib\model.js:4638:16
    at C:\Users\User\Desktop\NodeProjects\Citty\node
_modules\mongoose\lib\query.js:4345:12
    at model.Query.Query._completeOne (C:\Users\User
\Desktop\NodeProjects\Citty\node_modules\mongoose\li
b\query.js:2046:12)
    at Immediate.Query.base.findOne.call (C:\Users\U
ser\Desktop\NodeProjects\Citty\node_modules\mongoose
\lib\query.js:2108:10)
    at Immediate.<anonymous> (C:\Users\User\Desktop\
NodeProjects\Citty\node_modules\mquery\lib\utils.js:
116:16)
    at runCallback (timers.js:705:18)
    at tryOnImmediate (timers.js:676:5)
    at processImmediate (timers.js:658:5)
Emitted 'error' event at:
    at C:\Users\User\Desktop\NodeProjects\Citty\node
_modules\mongoose\lib\model.js:4640:13
    at C:\Users\User\Desktop\NodeProjects\Citty\node
_modules\mongoose\lib\query.js:4345:12
    [... lines matching original stack trace ...]
    at processImmediate (timers.js:658:5)

Итак, как мне это запустить?

...