node.js 增删改查(原始)

 index.js  连接数据库

const mongoose = require('mongoose')
    //数据库连接27017是mongodb数据库的默认端口
mongoose.connect('mongodb://localhost/playground', { useNewUrlParser: true })
    .then(() => console.log('数据库连接成功'))
    .catch(() => console.log('数据库连接失败'))

user.js 创建用户集合规则

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

const User = mongoose.model('User', userSchema)

module.exports = User;

app.js 请求处理

const http = require('http');
const url = require('url')
const querystring = require('querystring')

// 连接数据库
require('./model/index.js')
const User = require('./model/user.js')



// 创建服务器
const app = http.createServer();


// 为服务器对象添加请求事件
app.on('request', async(req, res) => {
    // 请求方式
    const method = req.method;
    // 请求地址
    const { pathname, query } = url.parse(req.url, true)
    console.log(query, '123')

    console.log(pathname)
    if (method == "GET") {
        listtt = ''
        if (pathname == '/list') {
            let data = await User.find()
            listtt += `
            <!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <!-- 最新版本的 Bootstrap 核心 CSS 文件 -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
</head>

<body>
    <div class="container">
        <div class="row">
            <div class="title  col-md-10 col-md-offset-1">
                <div class="head">
                    <a href="/add" class="btn btn-success">添加用户</a>
                </div>
                <div class="content">
                    <table class="table table-striped">
                        <thead>
                            <tr>
                                <th>用户名</th>
                                <th>年龄</th>
                                <th>爱好</th>
                                <th>邮箱</th>
                                <th$>操作</th>
                            </tr>
                        </thead>
                        <tbody>
                        `
            data.forEach(item => {

                listtt +=
                    `
                        <tr>
                            <td>${item.name}</td>
                            <td>${item.age}</td>
                             <td>
                    `
                item.hobbies.forEach(item => {
                    listtt += `  
                                  
                    <span>${item}</span>              
                    `
                })
                listtt += ` 
                            </td>
                            <td>${item.email}</td>
                            <td>
                                <a href="/edit?id=${ item._id }" class="btn btn-default">修改</a>
                                <a href="/delete?id=${item._id}" class="btn btn-danger">删除</a>
                            </td>
                        </tr>
                             `
            });
            listtt += `
                        </tbody>

                    </table>
                </div>
            </div>
        </div>
    </div>
</body>
</html> `
            res.end(listtt)
        } else if (pathname == '/add') {
            add = `
            <!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <!-- 最新版本的 Bootstrap 核心 CSS 文件 -->
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
    <title>Document</title>
</head>

<body>
    <div class="container">
        <div class="row">
            <div class="title  col-md-10 col-md-offset-1">
                <h1>添加用户</h1>
                <form  method="post">
                    <div class="form-group">
                        <label for="exampleInputEmail1">姓名</label>
                        <input name="name" type="text" class="form-control" id="exampleInputEmail1" placeholder="请输入姓名">
                    </div>
                    <div class="form-group">
                        <label for="exampleInputPassword1">年龄</label>
                        <input name="age" type="text" class="form-control" id="exampleInputPassword1" placeholder="请输入年龄">
                    </div>
                    <div class="form-group">
                        <label for="exampleInputEmail1">密码</label>
                        <input name="password" type="password" class="form-control" id="exampleInputEmail1" placeholder="请输入密码">
                    </div>
                    <div class="form-group">
                        <label for="exampleInputPassword1">邮箱</label>
                        <input name="email" type="email" class="form-control" id="exampleInputPassword1" placeholder="请输入邮箱">
                    </div>

                    <div class="checkbox">
                        <label>
                        <input type="checkbox" value="篮球" name=" hobbies" > 篮球
                      </label> 
                        <label>
                        <input type="checkbox" value="足球" name=" hobbies" > 足球
                      </label>
                        <label> 
                        <input type="checkbox"value="橄榄球"  name=" hobbies" > 橄榄球
                      </label> 
                        <label>
                        <input type="checkbox" value="敲代码" name=" hobbies" > 敲代码
                      </label>
                        <label> 
                        <input type="checkbox" value="抽烟" name=" hobbies" > 抽烟
                      </label> 
                        <label> 
                        <input type="checkbox"  value="喝酒" name=" hobbies"> 喝酒
                      </label>
                        <label> 
                        <input type="checkbox" value="烫头" name=" hobbies" > 烫头
                      </label>
                    </div>
                    <button type="submit" class="btn btn-success">提交</button>
                </form>
            </div>
        </div>
    </div>

</body>

</html>
            `
            res.end(add)
        } else if (pathname == '/edit') {
            let user = await User.findOne({ _id: query.id });
            let hobbies = ['足球', '篮球', '橄榄球', '敲代码', '抽烟', '喝酒', '烫头']
            let edit = ``
            var editid = user._id
            edit += `
            <!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <!-- 最新版本的 Bootstrap 核心 CSS 文件 -->
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
    <title>Document</title>
</head>

<body>
    <div class="container">
        <div class="row">
            <div class="title  col-md-10 col-md-offset-1">
                <h1>编辑用户</h1>
                <form method="post" action="/edit?id="${user._id}">
                <div class="form-group">
                    <label for="exampleInputEmail1">姓名</label>
                    <input name="name" type="text" class="form-control" id="exampleInputEmail1" placeholder="请输入姓名" value="${user.name}">
                    <input name="useid" type="hidden" class="form-control" value="${user._id}">
                </div>
                <div class="form-group">
                    <label for="exampleInputPassword1">年龄</label>
                    <input name="age" type="text" class="form-control" id="exampleInputPassword1" placeholder="请输入年龄" value="${user.age}">
                </div>
                <div class="form-group">
                    <label for="exampleInputEmail1">密码</label>
                    <input name="password" type="password" class="form-control" id="exampleInputEmail1" placeholder="请输入密码" value="${user.password}">
                </div>
                <div class="form-group">
                    <label for="exampleInputPassword1">邮箱</label>
                    <input name="email" type="email" class="form-control" id="exampleInputPassword1" placeholder="请输入邮箱" value="${user.email}">
                </div>
                <div class="checkbox">
                `

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

                       <label>
                           <input type="checkbox" name=" hobbies" value="${item}">${item}
                       </label>
                   `
                }
            })
            edit += `
                    </div>
                    <button type="submit" class="btn btn-success">提交修改</button>
                </form>
            </div>
        </div>
    </div>

</body>

</html>`
            res.end(edit)
        } else if (pathname == '/delete') {
            // res.end(query.id)
            await User.findOneAndDelete({ _id: query.id });
            res.writeHead(301, {
                Location: '/list'
            })
            res.end()
        }
    } else if (method == "POST") {
        //用户添加功能
        if (pathname == '/add') {
            //接受用户提交的信息
            let formData = '';
            //接受post参数
            req.on('data', param => {
                    formData += param;
                })
                //post 参数接受完毕
            req.on('end', async() => {
                let user = querystring.parse(formData.replace(/\+/g, ""))
                console.log(user['hobbies'])

                //将提交的数据提交到数据库中
                await User.create(user);
                // 301 代表重定向
                // location 跳转地址
                res.writeHead(301, {
                    Location: '/list'
                });
                res.end();
            })
        } else if (pathname == '/edit') {
            //接受用户提交的信息
            let formData = '';
            //接受post参数
            req.on('data', param => {
                    formData += param;
                })
                //post 参数接受完毕
            req.on('end', async() => {
                let user = querystring.parse(formData.replace(/\+/g, ""))

                //将提交的数据提交到数据库中
                await User.updateOne({ _id: user.useid }, { name: user.name, age: user.age, password: user.password, email: user.email, hobbies: user.hobbies });
                // 301 代表重定向
                // location 跳转地址
                res.writeHead(301, {
                    Location: '/list'
                });
                res.end();

            })
        }
    }
})

console.log('连接服务器成功')
app.listen(3000)

猜你喜欢

转载自www.cnblogs.com/Rivend/p/12334103.html