【发布时间】:2021-10-07 21:23:25
【问题描述】:
所以我一直在开发一种电子商务网站,用户可以在其中为他们喜欢的商店添加书签,然后将其保存到数据库中。
我有两种猫鼬模式,一种用于商店,另一种用于用户
//jshint esversion:6
require('dotenv').config();
const express = require("express");
const bodyParser = require("body-parser");
const ejs = require("ejs");
const mongoose = require("mongoose");
const session = require("express-session");
const passport = require("passport");
const passportLocalMongoose = require("passport-local-mongoose");
const GoogleStrategy = require('passport-google-oauth20').Strategy;
const findOrCreate = require("mongoose-findorcreate");
const cors = require("cors");
const app = express();
app.set('view engine', 'ejs');
// app.use(cors());
// app.use(express.json());
app.use(bodyParser.urlencoded({extended: true}));
app.use(express.static("public"));
app.use(session({
resave: false,
saveUninitialized: true,
}));
app.use(passport.initialize());
app.use(passport.session());
mongoose.connect('mongodb://localhost:27017/journalDB', {useNewUrlParser: true, useUnifiedTopology: true});
mongoose.set('useCreateIndex', true);
const journalSchema = new mongoose.Schema({
title: String,
category: String,
subcategory: String,
rating: Number,
link: String,
description: String,
});
const userSchema = new mongoose.Schema ({
username: String,
password: String,
journal: [{type: mongoose.Schema.Types.ObjectId, ref: 'Journal'}]
});
userSchema.plugin(passportLocalMongoose);
userSchema.plugin(findOrCreate);
const Journal = mongoose.model("Journal", journalSchema);
const User = mongoose.model("User", userSchema);
每个商店都有一个带有描述的单独页面。我想添加一个按钮或输入标签,这会将这家商店保存到用户的架构中。
获取和发布路线:
app.get("/journals/:journalId", function(req, res){
const requestedJournalId = req.params.journalId;
Journal.findOne({_id: requestedJournalId}, function(err, foundJournal){
res.render("stats", {
_id: foundJournal._id,
title: foundJournal.title,
subcategory: foundJournal.subcategory,
link: foundJournal.link,
description: foundJournal.description
});
});
});
app.post("/stats", function(req, res){
const favJournal = req.journal.id;
User.findById(req.user.id, function(err, foundUser) {
if (err) {
console.log(err);
} else {
if (foundUser) {
foundUser.journal.push(favJournal);
foundUser.save(function() {
res.redirect("/favourite");
});
}
}
});
});
stats.ejs:
<div class="container py-4">
<div class="row">
<div class="col">
<div class="flex-container-stats">
<div class="stats-image">
<img class="img-fluid" style="height: 350px;max-wdth:500px;" id="img_DocPreview" src="images/clothes.jfif" alt="">
</div>
<div class="stats-description">
<h1 class="display-5 fw-bold "><%=title%></h1>
<p class="fs-4"><%=subcategory%></p>
<a href="<%=link%>" target="_blank" ><i class="fab fa-instagram fa-3x"></i></a>
<a href="https://www.facebook.com/" target="_blank" class="px-2"><i class="fab fa-facebook-square fa-3x"></i></a>
<a href="https://telegram.org/" target="_blank" class="px-2"><i class="fab fa-telegram-plane fa-3x"></i></a>
</div>
</div>
<form action="/stats" method="post">
<div class="stats-button">
<!-- <label for=""><%=_id%></label>
<input type="submit" name="savedJournal" placeholder="Add to favourite"> -->
</div>
</form>
</div>
</div>
</div>
我是 MongoDB 和 node.js 的新手。不确定我缺少什么,也无法从遇到的类似问题中找到合适的解决方案。
【问题讨论】:
标签: node.js mongodb mongoose ejs