javascript - ReferenceError:产品未定义
问题描述
我在网上商店工作,同时我试图从 MongoDB 获取产品,它的返回产品没有定义我使用 ejs 作为模板引擎。
<%- include('parts/header') %>
<%- include('parts/navbar') %>
<div class="container">
<div class="row">
<% for(let product of products) { %>
<div class="col col-12 col-md-6 col-lg-4 col-xl-3">
<div class="card" style="width: 18rem;">
<img src="<%= product.image%> " class="card-img-top">
<div class="card-body">
<h5 class="card-title">
<a href="/product/<%= product._id%>"><%= product.name%>></a>
<p>Price: <%= product.price %> $</p>
</h5>
<form action="/cart" method="POST">
<input type="number" name="amount" class="from-control">
<input type="submit" value="Add to cart" class="btn btn-primary">
</form>
</div>
</div>
</div>
<% } %>
</div>
</div>
<%- include('parts/footer') %>
应用程序.js
const express = require('express');
const path = require('path');
const homeRouter = require('./routes/home.route');
const app = express();
app.use(express.static(path.join(__dirname, 'assets')));
app.use(express.static(path.join(__dirname, 'images')));
app.set('view engine', 'ejs');
app.set('views', 'views') //default
app.get('/', (req, res) => {
res.render('index')
})
app.use('/', homeRouter)
app.listen(3000, () => {
console.log('server listen to port 3000')
})
产品.model
const mongoose = require('mongoose');
const DB_URL = 'mongodb://localhost:27017/online-shop';
const productSchema = mongoose.Schema({
name: String,
image: String,
price: Number,
description: String,
category: String
})
const Product = mongoose.model('product', productSchema)
exports.getAllProducts = () => {
//connect to db
//get products
//disconnect
return new Promise((resolve, reject) => {
mongoose.connect(DB_URL).then(() => {
return Product.find({})
}).then(products => {
mongoose.disconnect()
resolve(products)
}).catch(err => reject(err))
})
}
家庭控制器
const productsModel = require('../models/products.model')
exports.getHome = (req, res, next) => {
//get products
//render index.ejs
productsModel.getAllProducts().then(products => {
res.render('index', {
products: products
})
})
}
结果
参考错误:D:\programming\OnlineShop\views\index.ejs:6 4|
5| <div class="row">
6| <% for(let product of products) { %>
7| <div class="col col-12 col-md-6 col-lg-4 col-xl-3">
8| <div class="card" style="width: 18rem;">
9| <img src="<%= product.image%> " class="card-img-top">
products 未在 eval 处定义(编译时 eval (D:\programming\OnlineShop\node_modules\ejs\lib\ejs.js:662:12), :16:27) 在索引处 (D:\programming\OnlineShop\node_modules\ ejs\lib\ejs.js:692:17) at tryHandleCache (D:\programming\OnlineShop\node_modules\ejs\lib\ejs.js:272:36) at View.exports.renderFile [as engine] (D:\在 tryRender (D:\ Programming\OnlineShop\node_modules\express\lib\application.js:640:10) 在 Function.render (D:\programming\OnlineShop\node_modules\express\lib\application.js:592:3) 在 ServerResponse.render (D :\programming\OnlineShop\node_modules\express\lib\response.js:1012:7) at D:\programming\OnlineShop\app.js:13:9 at Layer.handle [as handle_request] (D:\programming\OnlineShop\node_modules\express\lib\router\layer.js:95:5) 在下一个 (D:\programming\OnlineShop\node_modules\express\lib\router\route.js:137:13) 在 Route。 dispatch (D:\programming\OnlineShop\node_modules\express\lib\router\route.js:112:3) 在 Layer.handle [as handle_request] (D:\programming\OnlineShop\node_modules\express\lib\router\layer .js:95:5) 在 D:\programming\OnlineShop\node_modules\express\lib\router\index.js:281:22 在 Function.process_params (D:\programming\OnlineShop\node_modules\express\lib\router\ index.js:335:12) 在下一个 (D:\programming\OnlineShop\node_modules\express\lib\router\index.js:275:10)处理 [as handle_request] (D:\programming\OnlineShop\node_modules\express\lib\router\layer.js:95:5) 在 D:\programming\OnlineShop\node_modules\express\lib\router\index.js:281 :22 在 Function.process_params (D:\programming\OnlineShop\node_modules\express\lib\router\index.js:335:12) 在下一个 (D:\programming\OnlineShop\node_modules\express\lib\router\index. js:275:10)处理 [as handle_request] (D:\programming\OnlineShop\node_modules\express\lib\router\layer.js:95:5) 在 D:\programming\OnlineShop\node_modules\express\lib\router\index.js:281 :22 在 Function.process_params (D:\programming\OnlineShop\node_modules\express\lib\router\index.js:335:12) 在下一个 (D:\programming\OnlineShop\node_modules\express\lib\router\index. js:275:10)
解决方案
我认为这是因为您的数据库为空或您的数据库无法发送数据。尝试使用
<% if(products) {%>
<% } %>
在 index.js 文件中的循环之前。
推荐阅读
- javascript - 使用 $near 和 $maxDistance 一起查询 MongoDB 不返回任何结果
- java - 如何通过给出月份中的星期和星期几来获取日期
- corda - generateSpend 源自另一个节点
- maven - IntelliJ IDEA 和 kendo 无法解析 taglib
- angular - 如果 ngModel 值不再在下拉选项列表中,则重置为默认值
- c - C - 循环不继续
- c - OpenMP C 程序运行速度比顺序代码慢
- java - 如何使用 log4j 在 Spring Boot 中创建最近 5 天的记录器 zip 文件?
- javascript - 在 php 中使用 javascript 变量作为标签
- java - 即使映射了 URL,Spring 也会返回 HTTP 404