nodejs调用mongodb!!!

Nodejs调用MongoDB

  • 要在 MongoDB 中创建一个数据库,首先我们需要创建一个 MongoClient 对象,然后配置好指定的 URL 和 端口号。

    如果数据库不存在,MongoDB 将创建数据库并建立连接。

  1. 导入MongoDB包:
cnpm install mongodb --save
  1. 引入MongoDB文件:
const {MongoClient} = require('mongodb');
  1. 定义数据库连接地址url,定义要操作的数据库dbName, 实例化MongoClient 传入数据库连接地址:
const url = 'mongodb://127.0.0.1:27017';

const dbName = 'aniu';

const client = new MongoClient(url, { useUnifiedTopology: true });
  1. 连接数据库:
client.connect((err)=>{
	if(err){
		console.log(err);
		return;
	}
  console.log('数据库连接成功');
});

操作数据库

  1. 查找数据:
db.collection('user').find({ "age": 13 }).toArray((err, data) => {
        console.log(data);
        // 操作数据库完成以后要关闭数据库连接
        client.close();

    })
  1. 增加数据:
db.collection('user').insertOne({ 'username': 'nodejs操作mongodb', 'age': 10 }, (err, result) => {
        if (err) {
            console.log(err);
            return;
        }
        console.log("增加成功")
        console.log(result);
        // 操作数据库完成以后要关闭数据库连接
        client.close();
    })
  1. 修改数据:
db.collection('user').updateOne({ 'username': 'kko1' }, { $set: { 'age': 111222 } }, (err, result) => {
        if (err) {
            console.log(err);
            return;
        }
        console.log('修改成功');
        console.log(result);
        // 操作数据库完成以后要关闭数据库连接
        client.close();
    })
  1. 删除一条数据:
db.collection('user').deleteOne({ 'name': 'aniu' }, (err) => {
        if (err) {
            console.log(err);
            return;
        }
        console.log('删除一条数据成功');
        client.close();
    })
  1. 删除多条数据:
db.collection('user').deleteMany({ 'name': 'zhangsan' }, (err) => {
        if (err) {
            console.log(err);
            return;
        }
        console.log('删除多条数据成功');
        client.close();
    })

总结:

// cnpm istall mongodb --save

//  引入mongodb文件
const { MongoClient } = require('mongodb');

// 定义数据库连接的地址
const url = 'mongodb://127.0.0.1:27017';

// 定义要操作的数据库
const dbName = 'aniu';


// 实例化MongoClient 传入数据库连接地址
const client = new MongoClient(url, { useUnifiedTopology: true });
// 连接数据库
client.connect((err) => {
    if (err) {
        conssole.log(err);
        return;
    }
    console.log('数据库连接成功');
    let db = client.db(dbName);


    // 1.查找数据
    // db.collection('user').find({ "age": 13 }).toArray((err, data) => {
    //     console.log(data);

    //     // 操作数据库完成以后要关闭数据库连接
    //     client.close();

    // })

    // 2.增加数据
    // db.collection('user').insertOne({ 'username': 'nodejs操作mongodb', 'age': 10 }, (err, result) => {
    //     if (err) {
    //         console.log(err);
    //         return;
    //     }
    //     console.log("增加成功")
    //     console.log(result);
    //     操作数据库完成以后要关闭数据库连接
    //     client.close();
    // })

    // 3.修改数据
    // db.collection('user').updateOne({ 'username': 'kko1' }, { $set: { 'age': 111222 } }, (err, result) => {
    //     if (err) {
    //         console.log(err);
    //         return;
    //     }
    //     console.log('修改成功');
    //     console.log(result);
    //     // 操作数据库完成以后要关闭数据库连接
    //     client.close();
    // })

    // 4.删除一条数据
    // db.collection('user').deleteOne({ 'name': 'aniu' }, (err) => {
    //     if (err) {
    //         console.log(err);
    //         return;
    //     }
    //     console.log('删除一条数据成功');
    //     client.close();
    // })

    // 5.删除多条数据
    // db.collection('user').deleteMany({ 'name': 'zhangsan' }, (err) => {
    //     if (err) {
    //         console.log(err);
    //         return;
    //     }
    //     console.log('删除多条数据成功');
    //     client.close();
    // })

});

nodejs服务器端操纵数据库

我们要通过在页面中输入数据传入数据库中,并保持页面与数据库的动态相连。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

app.js
const http = require('http');
const ejs = require('ejs');
const app = require('./module/route.js');
const querystring = require('querystring');
const { MongoClient } = require('mongodb');
const url = 'mongodb://localhost:27017';
const dbName = 'aniu';

// const client = new MongoClient(url, { useUnifiedTopology: true });

// 注册web服务器
http.createServer(app).listen(3000);


// 配置路由
app.get('/', function(req, res) {

    MongoClient.connect(url, { useUnifiedTopology: true }, (err, client) => {

        if (err) {
            console.log(err);
            return;
        }
        let db = client.db(dbName);

        // 查询数据
        db.collection('people').find({}).toArray((err, result) => {
            if (err) {
                console.log(err);
                return;
            }
            console.log(result);
            client.close();
            ejs.renderFile('./views/index.ejs', {
                list: result
            }, (err, data) => {
                res.send(data);
            });
        })
    })
});

app.get('/register', function(req, res) {
    ejs.renderFile('./views/register.ejs', {}, (err, data) => {
        res.send(data);
    })
})

app.post('/doRegister', function(req, res) {
    // name=aniu&age=11
    // {
    //     "name": "aniu",
    //     "age":11
    // }
    let body = querystring.parse(req.body);
    MongoClient.connect(url, { useUnifiedTopology: true }, (err, client) => {
        if (err) {
            console.log(err);
            return;
        }
        let db = client.db(dbName);
        db.collection('people').insertOne(body, (err, result) => {
            if (err) {
                console.log(err);
                return;
            }
            console.log('增加数据成功');
            res.send('增加数据成功');

        })
    })
})
index.ejs
<!DOCTYPE html>
<html lang="en">

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

<body>
    <h2>获取用户列表数据</h2>
    <ul>
        <%for(var i=0;i<list.length;i++){%>
            <li>
                <%=list[i].name%>---
                    <%=list[i].age%>
            </li>
            <%}%>
    </ul>
</body>

</html>
register.ejs
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="./css/style.css">
</head>

<body>
    <h2>注册页面</h2>
    <form action="/doRegister" method="POST">
        用户名: <input type="text" name="name">
        <br>
        <br> 年龄: <input type="text" name="age">
        <br>
        <br>
        <input type="submit" value="提交">
    </form>
</body>

</html>
route.js
const fs = require('fs');
const url = require('url');
const path = require('path');

// 扩展res
function changeRes(res) {
    res.send = (data) => {
        res.writeHead(200, { 'Content-Type': 'text/html;charset="utf-8"' });
        res.end(data);
    }
}
// 根据后缀名获取文件类型
function getMimeFile(extname) {
    var data = fs.readFileSync('./data/mime.json');
    var mimeObj = JSON.parse(data.toString());
    return mimeObj[extname];
}
// 静态Web服务方法
function initStatic(request, response, staticPath) {
    // 获取地址
    let pathName = url.parse(request.url).pathname;
    pathName = pathName == '/' ? '/index.html' : pathName;
    let extname = path.extname(pathName);
    // 通过fs模板读入文件
    try {
        let data = fs.readFileSync('./' + staticPath + pathName);
        if (data) {
            let mime = getMimeFile(extname);
            response.writeHead(200, { 'Content-Type': '' + mime + ';charset="utf-8"' });
            response.end(data);
        }
    } catch (error) {

    }

}

let server = () => {
    let G = {
        _get: {},
        _post: {},
        staticPath: 'static' //静态web目录
    };

    let app = function(req, res) {
            //  扩展res的方法
            changeRes(res);

            // 配置静态web服务器
            initStatic(req, res, G.staticPath);

            let pathname = url.parse(req.url).pathname;

            // 获取请求类型
            let method = req.method.toLowerCase();

            if (G['_' + method][pathname]) {
                if (method == 'get') {
                    G['_' + method][pathname](req, res);
                } else {
                    //post 获取post数据 把它绑定到req.body
                    let postData = '';
                    req.on('data', (chunk) => {
                        postData += chunk;
                    });
                    req.on('end', () => {

                        req.body = postData;
                        G['_' + method][pathname](req, res);
                    });

                }

            } else {
                res.writeHead(404, { 'Content-Type': 'text/html;charset="utf-8"' });
                res.end('404页面不存在');
            }
        }
        // get请求
    app.get = function(str, cb) {
            G._get[str] = cb;
        }
        // post请求
    app.post = function(str, cb) {
        G._post[str] = cb;
    }

    // 配置静态web服务目录
    app.static = function(staticPath) {
        G.staticPath = staticPath;
    }

    return app;
}

module.exports = server();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值