美文网首页
nodejs结合mongoDB数据库的增删改查操作

nodejs结合mongoDB数据库的增删改查操作

作者: 五四青年_4e7d | 来源:发表于2020-01-01 14:52 被阅读0次

必备条件:安装数据库和及图形化操作软件mongoDB Compass
第一种《非模块化开发》:

//创建网站服务器实现客户端和服务端交互:
const http = require('http')
//链接数据库:
const mongoose = require('mongoose')
//请求地址模块:
const url = require('url')
const querystring = require("querystring");
mongoose.connect('mongodb://localhost/playground', { useNewUrlParser: true })
    .then(() => console.log('成功'))
    .catch(() => console.log('失败'))
//创建用户集合规则:
const userSchema = new mongoose.Schema({
    name: {
        type: String,
        required: true,
        minlength: 2,
        maxlength: 8
    },
    age: {
        type: Number,
        minlength: 18,
        maxlength: 80
    },
    password: String,
    email: String,
    hobbies: [String]

})
//创建集合:  
const User = mongoose.model('User', userSchema)
//导入json :    mongoimport -d playground -c users --file ./users.json    

// User.create({
//     name: "李慷账户2",
//     age: 40,
//     password:"123456",
//     email:"1039994829@qq.com",
//     hobbies:"读书"
// },(err,result)=>{
// console.log(err)
// console.log(result)
// })
//创建服务器:
const app = http.createServer()
//为服务器添加请求事件:
app.on('request', async (req, res) => {

    //请求方式
    const method = req.method;
    //请求地址
    const { pathname, query } = url.parse(req.url, true);
    if (method == "GET") {
        //     //呈现用户页面
        if (pathname == '/list') {
            let users = await User.find()
            console.log(users)
            let list = `<!DOCTYPE html>
            <html lang="en">
            <head>
                <meta charset="UTF-8">
                <meta name="viewport" content="width=device-width, initial-scale=1.0">
                <meta http-equiv="X-UA-Compatible" content="ie=edge">
                <title>展示列表</title>
            </head>
            <body>
            <button><a href="/add">添加用户</a></button>
                
            </body>
            </html>`;
            //数据循环展示;
            users.forEach(item => {
                list += `<p>
                       <span>姓名:<span>${item.name}</span></span>
                       <span>年龄:<span>${item.age}</span></span>
                       <span>邮箱:<span>${item.email}</span></span>
                       </p>`
                item.hobbies.forEach(item => {
                    list += `<span>${item}</span>`
                })
                list += `       <button><a href="/remove?id=${item._id}">删除</a></button> 
                                <button><a href="/modify?id=${item._id}">修改</a></button>`

            })
            res.end(list)
        } else if (pathname == '/add') {
            //添加用户表单界面
            let add = `<!DOCTYPE html>
            <html lang="en">
            <head>
                <meta charset="UTF-8">
                <meta name="viewport" content="width=device-width, initial-scale=1.0">
                <meta http-equiv="X-UA-Compatible" content="ie=edge">
                <title>添加列表</title>
            </head>
            <body>
            <form method="post" action="add">
                <input type="text" placeholder="姓名" name="name">
                <input type="age" placeholder="年龄" name="age">
                <input type="password" placeholder="密码" name="password">
                <input type="email" placeholder="邮箱" name="email">
                <p>
                 <input type="checkbox" value="吃饭"  name="hobbies">吃饭
                 <input type="checkbox" value="学习"  name="hobbies">学习
                 <input type="checkbox" value="工作"  name="hobbies">工作
                </p>
                <button type="submit">添加</button>
            </form>
            </body>
            </html>`
            res.end(add)
        } else if (pathname == '/modify') {
            //修改用户表单界面
            //通过id获取参数修改
            let user = await User.findOne({ _id: query.id })
            console.log(user)
            let hobbies = ['吃饭', '学习', '工作']
            let modify = `<!DOCTYPE html>
            <html lang="en">
            <head>
                <meta charset="UTF-8">
                <meta name="viewport" content="width=device-width, initial-scale=1.0">
                <meta http-equiv="X-UA-Compatible" content="ie=edge">
                <title>修改列表</title>
            </head>
            <body>
            <form method="post" action="/modify?id=${user._id}">
                <input type="text" placeholder="姓名" name="name" value="${user.name}">
                <input type="age" placeholder="年龄" name="age" value="${user.age}">
                <input type="password" placeholder="密码" name="password" value="${user.password}">
                <input type="email" placeholder="邮箱" name="email" value="${user.email}">`;
            hobbies.forEach(item => {
                //判断当前参数在不在返回值当中:
                let isbbies = user.hobbies.includes(item)
                if (isbbies) {
                    modify += `<input type="checkbox" value="${item}"  name="hobbies" checked>${item} `
                } else {
                    modify += `<input type="checkbox" value="${item}"  name="hobbies" >${item} `
                }

            })



            modify += `<button type="submit">修改确认</button>
            </form>
            </body>
            </html>`
            res.end(modify)
        }else if (pathname == '/remove') {
            //删除功能逻辑:
        await User.findOneAndDelete({_id:query.id})
        
        res.writeHead(301, {
            Location: '/list'
        });
        res.end();
        }

    } else if (method == "POST") {
        //用户添加功能
        if (pathname == '/add') {
            //接收用户参数:
            let formData = ""
            req.on('data', param => {
                formData += param
            })
            req.on('end', async () => {
                console.log(formData)
                //将数据添加到数据库当中
                let user = querystring.parse(formData)
                await User.create(user)
                //用户数据提交完毕重定向:
                res.writeHead(301, {
                    Location: '/list'
                });
                res.end();

            })
        } else if (pathname == '/modify') {
            //接收用户参数:
            let formData = ""
            req.on('data', param => {
                formData += param
            })
            req.on('end', async () => {
                console.log(formData)
                //将数据添加到数据库当中
                let user = querystring.parse(formData)
                await User.updateOne({_id:query.id},user)
                //用户数据提交完毕重定向:
                res.writeHead(301, {
                    Location: '/list'
                });
                res.end();
            })
            }
        

    }

    })
//监听端口:
app.listen(3000)

第二种《模块化开发》:
结构:


image.png

model文件夹下:


image.png
app.js

//创建网站服务器实现客户端和服务端交互:
const http = require('http')
//请求地址模块:
const url = require('url')
const querystring = require("querystring");

require('./model/index.js')
const User = require('./model/user.js')
//导入json :    mongoimport -d playground -c users --file ./users.json    

// User.create({
//     name: "李慷账户2",
//     age: 40,
//     password:"123456",
//     email:"1039994829@qq.com",
//     hobbies:"读书"
// },(err,result)=>{
// console.log(err)
// console.log(result)
// })

//创建服务器:
const app = http.createServer()
//为服务器添加请求事件:
app.on('request', async (req, res) => {

    //请求方式
    const method = req.method;
    //请求地址
    const { pathname, query } = url.parse(req.url, true);
    if (method == "GET") {
        //     //呈现用户页面
        if (pathname == '/list') {
            let users = await User.find()
            console.log(users)
            let list = `<!DOCTYPE html>
            <html lang="en">
            <head>
                <meta charset="UTF-8">
                <meta name="viewport" content="width=device-width, initial-scale=1.0">
                <meta http-equiv="X-UA-Compatible" content="ie=edge">
                <title>展示列表</title>
            </head>
            <body>
            <button><a href="/add">添加用户</a></button>
                
            </body>
            </html>`;
            //数据循环展示;
            users.forEach(item => {
                list += `<p>
                       <span>姓名:<span>${item.name}</span></span>
                       <span>年龄:<span>${item.age}</span></span>
                       <span>邮箱:<span>${item.email}</span></span>
                       </p>`
                item.hobbies.forEach(item => {
                    list += `<span>${item}</span>`
                })
                list += `       <button><a href="/remove?id=${item._id}">删除</a></button> 
                                <button><a href="/modify?id=${item._id}">修改</a></button>`

            })
            res.end(list)
        } else if (pathname == '/add') {
            //添加用户表单界面
            let add = `<!DOCTYPE html>
            <html lang="en">
            <head>
                <meta charset="UTF-8">
                <meta name="viewport" content="width=device-width, initial-scale=1.0">
                <meta http-equiv="X-UA-Compatible" content="ie=edge">
                <title>添加列表</title>
            </head>
            <body>
            <form method="post" action="add">
                <input type="text" placeholder="姓名" name="name">
                <input type="age" placeholder="年龄" name="age">
                <input type="password" placeholder="密码" name="password">
                <input type="email" placeholder="邮箱" name="email">
                <p>
                 <input type="checkbox" value="吃饭"  name="hobbies">吃饭
                 <input type="checkbox" value="学习"  name="hobbies">学习
                 <input type="checkbox" value="工作"  name="hobbies">工作
                </p>
                <button type="submit">添加</button>
            </form>
            </body>
            </html>`
            res.end(add)
        } else if (pathname == '/modify') {
            //修改用户表单界面
            //通过id获取参数修改
            let user = await User.findOne({ _id: query.id })
            console.log(user)
            let hobbies = ['吃饭', '学习', '工作']
            let modify = `<!DOCTYPE html>
            <html lang="en">
            <head>
                <meta charset="UTF-8">
                <meta name="viewport" content="width=device-width, initial-scale=1.0">
                <meta http-equiv="X-UA-Compatible" content="ie=edge">
                <title>修改列表</title>
            </head>
            <body>
            <form method="post" action="/modify?id=${user._id}">
                <input type="text" placeholder="姓名" name="name" value="${user.name}">
                <input type="age" placeholder="年龄" name="age" value="${user.age}">
                <input type="password" placeholder="密码" name="password" value="${user.password}">
                <input type="email" placeholder="邮箱" name="email" value="${user.email}">`;
            hobbies.forEach(item => {
                //判断当前参数在不在返回值当中:
                let isbbies = user.hobbies.includes(item)
                if (isbbies) {
                    modify += `<input type="checkbox" value="${item}"  name="hobbies" checked>${item} `
                } else {
                    modify += `<input type="checkbox" value="${item}"  name="hobbies" >${item} `
                }

            })



            modify += `<button type="submit">修改确认</button>
            </form>
            </body>
            </html>`
            res.end(modify)
        }else if (pathname == '/remove') {
            //删除功能逻辑:
        await User.findOneAndDelete({_id:query.id})
        
        res.writeHead(301, {
            Location: '/list'
        });
        res.end();
        }

    } else if (method == "POST") {
        //用户添加功能
        if (pathname == '/add') {
            //接收用户参数:
            let formData = ""
            req.on('data', param => {
                formData += param
            })
            req.on('end', async () => {
                console.log(formData)
                //将数据添加到数据库当中
                let user = querystring.parse(formData)
                await User.create(user)
                //用户数据提交完毕重定向:
                res.writeHead(301, {
                    Location: '/list'
                });
                res.end();

            })
        } else if (pathname == '/modify') {
            //接收用户参数:
            let formData = ""
            req.on('data', param => {
                formData += param
            })
            req.on('end', async () => {
                console.log(formData)
                //将数据添加到数据库当中
                let user = querystring.parse(formData)
                await User.updateOne({_id:query.id},user)
                //用户数据提交完毕重定向:
                res.writeHead(301, {
                    Location: '/list'
                });
                res.end();
            })
            }
        

    }

    })
//监听端口:
app.listen(3000)

user.js(创建集合和规则)

//链接数据库:
const mongoose = require('mongoose')

//创建用户集合规则:
const userSchema = new mongoose.Schema({
    name: {
        type: String,
        required: true,
        minlength: 2,
        maxlength: 8
    },
    age: {
        type: Number,
        minlength: 18,
        maxlength: 80
    },
    password: String,
    email: String,
    hobbies: [String]

})
//创建集合:  
const User = mongoose.model('User', userSchema)

module.exports = User

index.js(链接数据库):

const mongoose = require('mongoose')
mongoose.connect('mongodb://localhost/playground', { useNewUrlParser: true })
    .then(() => console.log('成功'))
    .catch(() => console.log('失败'))

相关文章

网友评论

      本文标题:nodejs结合mongoDB数据库的增删改查操作

      本文链接:https://www.haomeiwen.com/subject/xqevoctx.html