nodejs调用mongodb!!!

2023-11-16

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();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

nodejs调用mongodb!!! 的相关文章

随机推荐

  • 数据分析(一)

    label distribution 是一个不均衡的数据集 需要做数据预处理 Sentence length distribution 句子的长度也很极端 有很多的outliers 需要对过长的数据进行舍弃或者切割
  • Eviews用向量自回归模型VAR实证分析公路交通通车里程与经济发展GDP协整关系时间序列数据和脉冲响应可视化

    最近我们被客户要求撰写关于向量自回归模型的研究报告 包括一些图形和统计输出 视频 向量自回归VAR数学原理及R软件经济数据脉冲响应分析实例 视频 向量自回归VAR数学原理及R语言软件经济数据脉冲响应分析实例 时长12 01 河源市是国务院1
  • JS函数curry(柯里化)

    原文地址 http blog jobbole com 77956 什么是柯里化 柯里化是这样的一个转换过程 把接受多个参数的函数变换成接受一个单一参数 译注 最初函数的第一个参数 的函数 如果其他的参数是必要的 返回接受余下的参数且返回结果
  • 机器学习之特征工程

    1 为什么做特征工程 我们学习编程语言时被告知程序 数据结构 算法 那么对于机器学习 我认为也可以类比为机器学习 大数据 机器学习算法 运行平台 面对一个机器学习问题 一般有两种解题思路 传统机器学习算法或者深度学习算法 一般而言 传统机器
  • Android.mk文件详解

    Android mk文件详解 Android mk 文件位于项目 jni 目录的子目录中 用于向构建系统描述源文件和共享库 它实际上是构建系统解析一次或多次的微小 GNU makefile 片段 Android mk 文件用于定义 Appl
  • 链表oj刷题——6道进阶题目

    目录 1 链表分割 题目 思路 2 链表的回文结构 题目 思路 3 输入两个链表 找出它们的第一个公共结点 题目 思路一 思路二 思路三 4 给定一个链表 判断链表中是否有环 题目 思路 5 给定一个链表 返回链表开始入环的第一个结点 如果
  • ConcurrentHashMap总结

    为什么80 的码农都做不了架构师 gt gt gt 并发编程实践中 ConcurrentHashMap是一个经常被使用的数据结构 相比于Hashtable以及Collections synchronizedMap ConcurrentHas
  • Struts2框架(一)

    Struts2框架 一 什么是框架 框架有什么用 1 框架 是 实现部分功能的代码 半成品 使用框架简化企业级软件开发 提高开发效率 2 学习框架 清楚的知道框架能做什么 还有哪些工作需要自己编码实现 二 什么是struts2框架 它有什么
  • 快速实现ML302 4G HTTP通信详解

    ML302作为HTTP Client和Server通信 一 本例程实现功能 二 Core提供的HTTP功能介绍 三 接线图 五 完整代码 代码运行结果 六 需注意事项 一 本例程实现功能 Core通过ML302 4G Cat1模块实现HTT
  • SpringBoot项目表格下载,上传和批量数据导入功能——小白级别,自己记录使用;

    应用场景 在后台管理项目中经常会需要批量导入的功能 这个时候我们就可以用Excel表格完成数据的下载 一 新建SpringBoot项目 并且配置数据库 1 pom xml 文件中导入依赖
  • 软件测试入门知识,jmeter系统基础课程———带你由浅入深学性能(完)

    软件测试知识持续更新中 性能测试常见问题 简述性能测试流程 如何确定系统最大负载 你们系统哪些地方 哪些功能 做了性能测试 你们的并发用户数是怎么确定的 你们性能测试什么时间执行 怎么分析性能测试结果 think time 的作用是什么 在
  • java复制的五种方法

    第一种 private static void methods1 throws FileNotFoundException IOException 字符流 一次读写一个字符 创建输入流对象 FileReader fr new FileRea
  • MySQL连表分组统计使用count查询出数据不准确问题解决方案

    先上两副图 这里有两张表 score表和year as表 要求统计出score表按年份分组的个数 且查询出来的内容需要包括year as表中的year as字段 使用正常连表并分组统计count得出的SQL和对应结果如下 SELECT b
  • 基于JDK1.8 的ArrayList源码分析

    基于JDK1 8 的ArrayList源码分析 代码注释 JDK版本 jdk1 8 0 181 package java util import java util function Consumer import java util fu
  • 信道编码知识点总结

    通信系统常用差错控制方法 自动重发请求法 ARQ 前向纠错法 FEC 信头差错校验法 HEC 自动重发法 接收端译码器判决收到的码序列有没有错误 通过反馈信道把判决结果告诉发送端 发送端根据判决信号重发接收端认为有错的信息 直到接收端认为正
  • 期货交易服务行业调研报告 - 市场现状分析与发展前景预测

    期货交易服务市场的企业竞争态势 该报告涉及的主要国际市场参与者有Daniels Trading Saxo Tradovate NinjaTrader AGT Futures CQG Gain Capital Group ABLWSYS Sm
  • MIPS系统网络的配置

    4 MIPS系统网络的配置 模拟MPIS系统 并配置MIPS系统网络 01 安装依赖文件 sudo apt get install uml utilities bridge utils 02 修改Ubuntu主机网络配置 将Ubuntu系统
  • 单目测距(yolo目标检测+标定+测距代码)

    单目测距 目标检测 标定 测距 实时感知本车周围物体的距离对高级驾驶辅助系统具有重要意义 当判定物体与本车距离小于安全距离时便采取主动刹车等安全辅助功能 这将进一步提升汽车的安全性能并减少碰撞的发生 上一章本文完成了目标检测任务 接下来需要
  • 一枚芯片的成本是多少?(2)芯片硬件成本

    芯片硬件成本 计算封装和测试的成本这个没有具体的公式 只是测试的价格大致和针脚数的二次方成正比 封装的成本大致和针脚乘功耗的三次方成正比 如果CPU X采用40nm低功耗工艺的自主芯片 其测试成本约为2美元 封装成本约为6美元 因40nm低
  • nodejs调用mongodb!!!

    Nodejs调用MongoDB 要在 MongoDB 中创建一个数据库 首先我们需要创建一个 MongoClient 对象 然后配置好指定的 URL 和 端口号 如果数据库不存在 MongoDB 将创建数据库并建立连接 导入MongoDB包