nodejs-mongodb 增删改查操作 案例1

const http = require('http');
// 连接数据库
const mongoose = require('mongoose');
const url = require('url');
const querystring = require('querystring');
// 连接数据库
mongoose.connect('mongodb://localhost/playground', { useUnifiedTopology: true, useNewUrlParser: true })
    .then(() => console.log('数据库连接成功...'))
    .catch(() => console.log('数据库连接失败...'))

// 创建用户集合规则

const UserSchema = new mongoose.Schema({
    name: {
        type: String,
        required: true,
        minlength: 2,
        maxlenfth: 20
    },
    age: {
        type: Number,
        min: 18,
        max: 80
    },
    password: String,
    email: String,
    hobbies: [String]
});

// 创建集合  返回集合构造函数
const User = mongoose.model('User', UserSchema);
//  创建服务器
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 == '/' || pathname == '/list') {
                // 查询用户信息
                let users = await User.find();
                // console.log(users);

                let list = `
                <!DOCTYPE html>
                <html lang="en">
                <head>
                    <meta charset="UTF-8">
                    <title>用户列表</title>
                    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css">
                </head>
                <body>
                    <div class="container">
                        <h6>
                            <a href="/add" class="btn btn-primary">添加用户</a>
                        </h6>
                        <table class="table table-striped table-bordered">
                            <tr>
                                <td>用户名</td>
                                <td>年龄</td>
                                <td>爱好</td>
                                <td>邮箱</td>
                                <td>操作</td>
                            </tr> 
                    `;

                // 对数据进行循环操作
                users.forEach(item => {
                    list += ` <tr>
                    <td>${item.name}</td>
                    <td>${item.age}</td>
                    <td>`

                    item.hobbies.forEach(item => {
                        list += `<span>  ${item}  </span> `
                    })


                    list += ` </td>
                <td>${item.email}</td>
                <td>
                    <a href="/remove?id=${item._id}" class="btn btn-danger btn-xs">删除</a>
                    <a href="/modify?id=${item._id}" class="btn btn-success btn-xs">修改</a>
                </td>
            </tr>`
                })
                list += `    </table>
                </div>
            </body>
            </html>`;
                res.end(list)
            } else if (pathname == '/add') {
                let add = `
                <!DOCTYPE html>
                <html lang="en">
                <head>
                    <meta charset="UTF-8">
                    <title>用户列表</title>
                    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css">
                </head>
                <body>
                    <div class="container">
                        <h3>添加用户</h3>
                        <form method='post'  action='/add'>
                          <div class="form-group">
                            <label>用户名</label>
                            <input name="name" type="text" class="form-control" placeholder="请填写用户名">
                          </div>
                          <div class="form-group">
                            <label>密码</label>
                            <input  name="password" type="password" class="form-control" placeholder="请输入密码">
                          </div>
                          <div class="form-group">
                            <label>年龄</label>
                            <input name="age" type="text" class="form-control" placeholder="请填写邮箱">
                          </div>
                          <div class="form-group">
                            <label>邮箱</label>
                            <input type="email" name="email" class="form-control" placeholder="请填写邮箱">
                          </div>
                          <div class="form-group">
                            <label>请选择爱好</label>
                            <div>
                                <label class="checkbox-inline">
                                  <input type="checkbox" value="足球" name="hobbies"> 足球
                                </label>
                                <label class="checkbox-inline">
                                  <input type="checkbox" value="篮球"  name="hobbies"> 篮球
                                </label>
                                <label class="checkbox-inline">
                                  <input type="checkbox" value="橄榄球"  name="hobbies"> 橄榄球
                                </label>
                                <label class="checkbox-inline">
                                  <input type="checkbox" value="敲代码"  name="hobbies"> 敲代码
                                </label>
                                <label class="checkbox-inline">
                                  <input type="checkbox" value="抽烟"  name="hobbies"> 抽烟
                                </label>
                                <label class="checkbox-inline">
                                  <input type="checkbox" value="喝酒"  name="hobbies"> 喝酒
                                </label>
                                <label class="checkbox-inline">
                                  <input type="checkbox" value="烫头" name="hobbies"> 烫头
                                </label>
                            </div>
                          </div>
                          <button type="submit" class="btn btn-primary">添加用户</button>
                        </form>
                    </div>
                </body>
                </html>`;

                res.end(add);
            } else if (pathname == '/modify') {
                // 查询用户信息
                let user = await User.findOne({ _id: query.id });
                let hobbies = ['烫头', '喝酒', '抽烟', '敲代码', '橄榄球', '篮球', '足球'];
                // 呈现修改用户表单页面
                let modify = `
                <!DOCTYPE html>
                <html lang="en">
                <head>
                    <meta charset="UTF-8">
                    <title>用户列表</title>
                    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@3.3.7/dist/css/bootstrap.min.css">
                </head>
                <body>
                    <div class="container">
                        <h3>修改用户</h3>
                        <form method='post'  action='/modify?id=${user._id}'>
                          <div class="form-group">
                            <label>用户名</label>
                            <input value="${user.name}" name="name" type="text" class="form-control" placeholder="请填写用户名">
                          </div>
                          <div class="form-group">
                            <label>密码</label>
                            <input  value="${user.password}" name="password" type="password" class="form-control" placeholder="请输入密码">
                          </div>
                          <div class="form-group">
                            <label>年龄</label>
                            <input value="${user.age}" name="age" type="text" class="form-control" placeholder="请填写邮箱">
                          </div>
                          <div class="form-group">
                            <label>邮箱</label>
                            <input type="email" value="${user.email}"  name="email" class="form-control" placeholder="请填写邮箱">
                          </div>
                          <div class="form-group">
                            <label>请选择爱好</label>
                            <div>        
                         `;

                hobbies.forEach(item => {
                    // 判断当前循环项在不在 用户的爱好数组
                    let isHobby = user.hobbies.includes(item);
                    if (isHobby) {
                        modify += `<label class="checkbox-inline">
                        <input type="checkbox" checked="checked" value="${item}" name="hobbies"> ${item}
                      </label>`;
                    } else {
                        modify += `<label class="checkbox-inline">
                        <input type="checkbox" value="${item}" name="hobbies">  ${item}
                      </label>`;
                    }
                })

                modify += `   </div>
                         </div>
                         <button type="submit" class="btn btn-primary">修改用户</button>
                       </form>
                   </div>
               </body>
               </html>`;

                res.end(modify);
            } else if (pathname == '/remove') {
                // res.end(query.id);
                await User.findOneAndDelete({ _id: query.id });
                res.writeHead(301, {
                    location: '/list'
                })
                res.end();
            } else {
                res.end('not found');
            }

        } else if (method == 'POST') {
            // 用户添加功能
            if (pathname == '/add') {
                // 1 接受用户提交的信息
                let formData = '';
                //  接收 post参数
                req.on('data', param => {
                        formData += param;
                    })
                    // post 数据接收完毕
                req.on('end', async() => {
                    console.log(querystring.parse(formData));
                    let user = querystring.parse(formData);
                    // 2 将用户提交的信息 添加到数据库中
                    await User.create(user)
                        // 301 代表重定向
                        // location 跳转地址
                    res.writeHead(301, {
                            Location: '/list'
                        })
                        // 当前请求结束
                    res.end();
                })
            } else if (pathname == '/modify') {
                // 1 接受用户提交的信息
                let formData = '';
                //  接收 post参数
                req.on('data', param => {
                        formData += param;
                    })
                    // post 数据接收完毕
                req.on('end', async() => {
                    // console.log(querystring.parse(formData));
                    let user = querystring.parse(formData);
                    // 2 将用户提交的信息 添加到数据库中
                    await User.updateOne({ _id: query.id }, user)
                        // 301 代表重定向
                        // location 跳转地址
                    res.writeHead(301, { Location: '/list' });
                    // 当前请求结束
                    res.end();
                })
            }
        }
    })
    // 监听端口
app.listen(3000);
posted @ 2020-06-11 11:45  EricBlog  阅读(218)  评论(0编辑  收藏  举报