我被卡在get
文件中的某些代码(根据教程的 )上,该文件获得了首页(称为 index.js
),该文件引用了名为index.hbs
(包含遍历数组中列出的所有乘积的循环的文件),并且每次循环遍历列出的乘积时,都会呈现输出在主页上。
服务器提供的输出比我列出的产品更多。我知道这是因为product-seeder.js
是异步的,但是当我使用教程中的代码(本来应该解决异步问题)并尝试加载服务器时,它只是一直加载并且不会停止。
我不知道为什么要这么做。我做错什么了吗?谢谢,非常感谢您的帮助。
我的javascript
:
index.js
我的var express = require('express');
var router = express.Router();
var Product = require('../models/product');
/* GET home page. */
router.get('/', function(req, res, next) {
Product.find(function(err, docs) {
res.render('shop/index', {title: 'Shopping Cart', products: docs});
});
});
module.exports = router;
:
product-seeder.js
我的index.hbs:
var Product = require('../models/product');
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost:27017/shopping', { useNewUrlParser: true });
var products = [
new Product({
imagePath: 'image.png',
title: 'PD 1',
description: 'Product 1',
price: 1
}),
new Product({
imagePath: 'image.png',
title: 'PD 2',
description: 'Product 2',
price: 2
}),
new Product({
imagePath: 'image.png',
title: 'PD 3',
description: 'Product 3',
price: 3
})
];
var done = 0;
for (var i = 0; i < products.length; i++) {
products[i].save(function() {
done++;
if (done === products.length) {
exit();
}
});
}
function exit() {
mongoose.disconnect();
}
答案 0 :(得分:0)
主要问题是,在呈现的页面中,有比预期更多的产品。
在您的数据库中,保存了多少产品?渲染量相同吗?如果是,则在保存产品时会发生此问题。
您可以按以下方式重写“保存逻辑”
const products = [/* .. things here .. */]
// This save one after another
async function save() {
for (var i = 0; i < products.length; i++) {
await products[i].save(); // this can generate an eslint warning/error
}
}
// This save all products basically together, if products.length is > 10 can be a bad idea
async function save() {
return Promise.all(products.map(prod => prod.save()));
}
save().then(() => mongoose.disconnect());