500 ReferenceError при включении JSON из MONGO в HTML - PullRequest
0 голосов
/ 22 сентября 2018

Я использую header.ejs, чтобы установить панель навигации для страницы products.ejs.В app.js я использую модуль Products для загрузки файла json из mongoDB, а моя схема mongoose находится в products.js.Я пытаюсь отобразить products.ejs в моем маршруте home / products и получаю сообщение об ошибке «заголовок не определен».Если я использую res.send (products), я получаю json, но я не могу отобразить страницу, я пытаюсь вставить json.

Некоторый код: 1.app.js:

// Module dependencies.
var express = require("express")
  , http    = require("http")
  , path    = require("path")
  , routes  = require("./routes")
  , mongoose = require("mongoose");
var app     = express();

var Products = require('./models/products');

//mongodb connection
var db = mongoose.connect("mongodb://localhost:27017/shop");
var db =  mongoose.connection;
//mongo error
db.on('error', console.error.bind(console, 'connection error:'));

// All environments
app.set("port", 80);
app.set("views", __dirname + "/views");
app.set("view engine", "ejs");
app.use(express.favicon());
app.use(express.logger("dev"));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(express.cookieParser("61d333a8-6325-4506-96e7-a180035cc26f"));
app.use(express.session());
app.use(app.router);
app.use(express.static(path.join(__dirname, "public")));
app.use(express.errorHandler());

// App routes
app.get("/home" , routes.index);
app.get("/hello", routes.hello);

app.get("/home/mens", routes.mens);
app.get("/home/womens", routes.womens);
app.get("/home/mens/mens_clothing", routes.mens_clothing);
app.get("/home/womens/womens_clothing", routes.womens_clothing);

app.use(function (req, res, next) {
    res.locals.title='Shop';
    next();
});

app.get('/home/products',(req,res,next)=>{
 Products.find({},function(err,products){
  if(err) return next(err);
  console.log(req);
res.render('products',{
   products:products
});

 })

});



// Run server
http.createServer(app).listen(app.get("port"), function() {
    console.log("Express server listening on port " + app.get("port"));
});

produscts.ejs

<div class="container">
   <% for (var i=0; i< Products.length; i++){ %>

    <h2>
     <%= Products[i].page_title %>
    </h2>

    <div class="row align_container border">

       <div class="col-md-5 col-sm-5">
         <img src="/images/<%=Products[i].image_groups[0].images[0].link %>" alt="" class="img-responsive">
       </div>

       <div class="col-md-7 col-sm-7 align_container">
          <h3>
            <%= Products[i].page_description %>
          </h3>
          <a class="btn btn-default align_child" href="/product/<%= Products[i]._id %>">Show Details</a>
        </div>

     </div> -->
     <% } %>
 </div>

<%- include('footer.ejs') -%>

Моя мангуста в продуктах: js:

var mongoose = require('mongoose');
var ProductSchema = new mongoose.Schema({
    _id: {
      type: String
    },
    page_description: {
      type: String
    },
    page_title: {
      type: String
    },
    name: {
      type: String,
      unique: true,
      required: true
    },
    image: {
      type: Buffer
    },

    price: {
      type: Number
    }

})
var Products= mongoose.model('Product', ProductSchema );
module.exports = Products;
//module.exports.getProducts = function(callback, limit) {
  //Products.find(callback).limit(limit);
//}

Мой header.ejs:

<!DOCTYPE html>
<html lang="en">
      <head>
        <title><%= title %></title>
        <link rel="stylesheet" href="/stylesheets/style.css" />
             <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta/css/bootstrap.min.css" integrity="sha384-/Y6pD6FV/Vv2HJnA6t+vslU6fwYXjCFtcEpHbNJ0lyAFsXTsjBbfaDjzALeQsN6M" crossorigin="anonymous">
             <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.3.1/css/all.css" integrity="sha384-mzrmE5qonljUremFsqc01SB46JvROS7bZs3IO2EmfFsd15uHvIt+Y8vEf7N7fWAU" crossorigin="anonymous">
    </head>

    <body>
        <!--<h1><%= title %></h1>
        <p>Welcome to <%= title %></p>-->

            </script>
            <nav class="navbar navbar-expand-sm navrbar-light bg-light">
                <a href="/home" class="navbar-brand"> Online Shop </a>
                <button class="navbar-toggler" data-toggle="collapse" data-target="#navbarMenu">
                    <span class="navbar-toggler-icon"></span>
                </button>
                <div class=" collapse navbar-collapse" id="navbarMenu">
                    <ul class="navbar-nav">
                        <li class="nav-item">
                            <a href="/home/mens" class="nav-link">Men's</a></li>
                        <li class="nav-item">
                            <a href="/home/womens" class="nav-link">Women's</a></li>
                    </ul>
                 </div>
                 <div id="#navbarMenu">
                    <ul class="navbar-nav">
                        <li class="nav-item">
                            <a href="#" class="nav-link">
                                <i class="fas fa-user-plus"></i>
                                Sign up
                            </a>
                        </li>
                        <li class="nav-item">
                            <a href="#" class="nav-link">
                                 <i class="fas fa-sign-in-alt"></i>
                                    Log in
                            </a>
                        </li>
                    </ul>
                 </div>
            </nav>

Мои маршруты.js:

exports.index = function(req, res) {
    res.render("index", {
        // Template data
        title: "Online Shop"
    });
};


exports.hello = function(req, res) {
    var _         = require("underscore");
    var mdbClient = require('mongodb').MongoClient;

    mdbClient.connect("mongodb://localhost:27017/shop", function(err, db) {
        var collection = db.collection('categories');

        collection.find().toArray(function(err, items) {
            res.render("hello", {
                // Underscore.js lib
                _     : _,

                // Template data
                title : "Hello World!",
                items : items
            });

            db.close();
        });
    });
};

exports.mens = function(req, res){
    res.render("mens", {
        title:"Online Shop"
    });
};

exports.womens = function(req, res){
    res.render("womens", {
        title:"Online Shop"
    });
};

exports.mens_clothing = function(req, res){
    res.render("mens_clothing", {
        title:"Online Shop"
    });
};

exports.womens_clothing = function(req, res){
    res.render("womens_clothing", {
        title:"Online Shop"
    });
};

exports.products = function(req, res) {
    res.render("products", {
        title: "Online Shop"
    });

};

1 Ответ

0 голосов
/ 22 сентября 2018

В app.js вы не передаете заголовок функции рендеринга.

app.get('/home/products',(req,res,next)=>{
    Products.find({},function(err,products){
        if(err) return next(err);
        console.log(req);
        res.render('products',{
            **title: 'My forgotten title',**
            products: products
        });
    })
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...