码迷,mamicode.com
首页 > 其他好文 > 详细

0_campgrounds CRUD

时间:2021-02-16 12:42:42      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:port   type   http   testing   dem   fun   page   outside   turn   

技术图片

技术图片

技术图片

技术图片

技术图片

  1. npm init -y
  2. npm i express mongoose ejs
  3. npm i method-override
  4. nodemon app.js
  5. nodemon seeds/index.js
models/campgrounds.js

const mongoose = require(‘mongoose‘); const Schema = mongoose.Schema; const CampgroundSchema = new Schema({ title: String, Price: String, description: String, location: String }); module.exports = mongoose.model(‘Campground‘, CampgroundSchema);
app.js

const express = require(‘express‘) const path = require(‘path‘); const mongoose = require(‘mongoose‘); const Campground = require(‘./models/campground‘); const methodOverride = require(‘method-override‘);//need npm i method-override firstly, for post/delete mongoose.connect(‘mongodb://localhost:27017/yelp-camp‘, { useNewUrlParser: true, useCreateIndex: true, useUnifiedTopology: true }); const db = mongoose.connection; db.on(‘error‘, console.error.bind(console, ‘connection error:‘)); db.once(‘open‘, function () { console.log("Database connected"); }); const app = express(); app.set(‘view engine‘, ‘ejs‘); app.set(‘views‘, path.join(__dirname, ‘views‘)) app.use(express.urlencoded({ extended: true })) app.use(methodOverride(‘_method‘)) //for post/delete // in edit.ejs <form action="/campgrounds/<%=campground._id%>?_method=PUT" method="POST"> app.get(‘/‘, (req, res) => { res.send(‘home‘) }) //create a new Campground with one info inserted // app.get(‘/makecampground‘, async (req, res) => { // const camp = new Campground({ title: ‘my backyard‘, description: ‘cheap camping‘ }); // await camp.save(); // res.send(camp) // }) app.get(‘/campgrounds‘, async (req, res) => { const campgrounds = await Campground.find({}); res.render(‘campgrounds/index‘, { campgrounds }) }) app.get(‘/campgrounds/new‘, (req, res) => { res.render(‘campgrounds/new‘) }) //need app.use(express.urlencoded({ extended: true })) //linked to edit.ejs <form action="/campgrounds/<%=campground._id%>?_method=PUT" method="POST"> app.post(‘/campgrounds‘, async (req, res) => { // res.send(req.body); output: {"campground":{"title":"akhda","location":"skjdks"}} const campground = new Campground(req.body.campground); await campground.save(); res.redirect(`/campgrounds/${campground._id}`) }) app.get(‘/campgrounds/:id‘, async (req, res) => { const campground = await Campground.findById(req.params.id); res.render(‘campgrounds/show‘, { campground }) }) app.get(‘/campgrounds/:id/edit‘, async (req, res) => { const campground = await Campground.findById(req.params.id); res.render(‘campgrounds/edit‘, { campground }) }) app.put(‘/campgrounds/:id‘, async (req, res) => { // res.send(‘worked!‘) this is for first time testing const { id } = req.params; const campground = await Campground.findByIdAndUpdate(id, { ...req.body.campground }) //new:true can be added res.redirect(`/campgrounds/${campground._id}`) //return to the updated info page }) app.delete(‘/campgrounds/:id‘, async (req, res) => { // res.send(‘worked!‘) this is for first time testing const { id } = req.params; await Campground.findByIdAndDelete(id); //new:true can be added res.redirect(‘/campgrounds‘) //return to the updated info page }) app.listen(3030, () => { console.log(‘Serving on port 3030‘) })
seeds/index.js

const mongoose = require(‘mongoose‘); const cities = require(‘./cities‘); const { places, descriptors } = require(‘./seedHelpers‘); const Campground = require(‘../models/campground‘); // ".." to get outside the seeds folder mongoose.connect(‘mongodb://localhost:27017/yelp-camp‘, { useNewUrlParser: true, useCreateIndex: true, useUnifiedTopology: true }); const db = mongoose.connection; db.on(‘error‘, console.error.bind(console, ‘connection error:‘)); db.once(‘open‘, function () { console.log("Database connected"); }); //添加单条信息~ // const seedDB = async () => { // await Campground.deleteMany({});//删除之前的记录 // const c = new Campground({ title: ‘purple field‘ });//添加新记录 // await c.save();//保存 // } // array[Math.floor(Math.random() * array.length)], 产生0~数组长度-1的随机数 const sample = array => array[Math.floor(Math.random() * array.length)]; const seedDB = async () => { await Campground.deleteMany({});//删除之前的记录 for (let i = 0; i < 50; i++) { const random1000 = Math.floor(Math.random() * 1000);//包含1000个城市, 0-999的随机数 const camp = new Campground({ location: `${cities[random1000].city}, ${cities[random1000].state}`, title: `${sample(descriptors)} ${sample(places)}` }) await camp.save(); } } //一定要记得运行这个! //运行之后断开mongoose连接 seedDB().then(() => { mongoose.connection.close(); })
index.ejs

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>campgrounds</title>
</head>

<body>
    <h1>all grounds</h1>
    <div>
        <a href="/campgrounds/new">Add</a>
    </div>
    <ul>
        <%for(let campground of campgrounds){%>
            <li>
                <a href="/campgrounds/<%=campground._id%>">
                    <%=campground.title%>
                </a>
            </li>
            <%}%>
    </ul>

</body>

</html>
show.ejs

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Show</title>
</head>

<body>
    <h1>
        <%=campground.title%>
    </h1>
    <h2>
        <%=campground.location%>
    </h2>
    <p>
        <a href="/campgrounds/<%=campground._id%>/edit">Edit</a>

    </p>
    <p>
    <form action="/campgrounds/<%=campground._id%>?_method=DELETE" method="POST">
        <button>delete</button>
    </form>
    </p>
    <footer>
        <a href="/campgrounds">All</a>
    </footer>
    <!-- a link to return to the all campgrounds page -->

</body>

</html>
new.ejs

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>New campground</title>
</head>

<body>
    <form action="/campgrounds" method="POST">
        <div>
            <label for="title">Title</label>
            <input type="text" id="titel" name="campground[title]">
        </div>

        <div>
            <label for="location">Location</label>
            <input type="text" id="location" name="campground[location]">
        </div>
        <button>Add</button>
    </form>
    <a href="/campgrounds">All</a>

</body>

</html>
edit.ejs

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Edit campground</title>
</head>

<body>
    <h1>Edit campground</h1>
    <form action="/campgrounds/<%=campground._id%>?_method=PUT" method="POST">
        <div>
            <label for="title">Title</label>
            <input type="text" id="titel" name="campground[title]" value="<%=campground.title%>">
            <!-- value = value="<%=campground.title%>, 默认值(待编辑信息)填充 -->
        </div>

        <div>
            <label for="location">Location</label>
            <input type="text" id="location" name="campground[location]" value="<%=campground.location%>">
        </div>
        <button>save</button>
    </form>
    <a href="/campgrounds/<%=campground._id%>">Back to campground</a>

</body>

</html>

 

0_campgrounds CRUD

标签:port   type   http   testing   dem   fun   page   outside   turn   

原文地址:https://www.cnblogs.com/LilyLiya/p/14400190.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!