Node.js数据库开发干货总结(包含MongoDB和MySQL)

1 Node.js简介

Node.js是一个Javascript运行环境,简单的说 Node.js 就是运行在服务端的 JavaScript。实质是对Chrome V8引擎进行了封装。

V8引擎执行Javascript的速度非常快,性能非常好。Node.js是一个基于Chrome JavaScript运行时建立的平台, 用于方便地搭建响应速度快、易于扩展的网络应用。Node.js 使用事件驱动非阻塞I/O 模型而得以轻量和高效,非常适合在分布式设备上运行数据密集型的实时应用。

 

2 Node.js数据库开发

本文包含了关系型数据库代表:MySQL非关系型数据库代表:MongoDB在Node.js上的操作

MongoDB中:

  • 文档:最小数据单位(类似于关系数据库中的行),由多个键值对组成
  • 集合:一组文档组成一个集合,(集合类似关系数据库中的表),一个集合中的文档可以是各种各样的
  • 数据库:一组集合组成一个数据库

首先,放一张本人整理的思维导图,便于大家了解整体内容:

Node.js数据库开发​​​​​​

 

2.1 用mongoose连接MongoDB(更简单)

   mongoose中的一切由schema开始,它是一种以文件形式存储的数据库模型骨架,它定义了model中的所有属性

  • 连接MongoDB

   先安装模块:

npm install mongoose

   然后连接MongoDB:

const mongoose =require('mongoose '); 
const url = 'mongodb://localhost/database';
mongoose.connect(url,function(err){
    ...
});

//注:完整url为'mongodb://user:pass@localhost:port/database'
  • 操作MongoDB

   1.mongoose插入

//mongoose插入
mongoose.connect(uri,function(err){...}));

//实例化一个ArticleSchema
const ArticleSchema = new mongoose.Schema({
	title: String,
    author: String,
    time: Date
});

//注册一个model
mongoose.model('Article',ArticleSchema)

//将文档插入集合
const Article = mongoose.model('Article');
var art = new Article({
	title:'node.js',
    author:'node',
    time: new Date()
})

art.save(function(err){
	...
})

  2.mongoose查询

  mongoose查询有两种方式,分别为:控制台查询和正常查询

  控制台查询:

//mongoose查询
**1.控制台查询**
**切换至article数据库**
use article

**查看article数据库所有collection**
show collections

**查看名为articles的collection中的所有文档**
db.articles.find()

**返回查询到的第一条数据**
db.articles.findOne()

  正常查询:

Article.find({},function(err, docs){
    ...
});

  3.mongoose修改

//mongoose中可以直接在查询记录后修改记录的值,修改后直接调用保存即可
const Article = mongoose.model('Article');

//查询数据
Article.find({title:'node.js'},function(err, docs){
//修改数据
    docs[0].title = 'javascript';
//保存修改后的数据
    docs[0].save();
}); 

  4. mongoose删除

//mongoose删除
//查询数据
Article.find({title:'node.js'},function(err, docs){
//返回的是一个符合查询条件的所有文档组成的数组,逐个删除文档
	if(docs){
    docs.forEach(function(ele){ele.remove();})
    }
}); 

 

2.2 用node-mongodb-native连接MongoDB

   注意:用 node-mongodb-native需要注意的是每次操作完 MongoDB都应该调用 close方法关闭 MongoDB

  •   连接MongoDB

   先安装模块:

npm install mongodb

  然后连接MongoDB:

//连接MongoDB
var MongoClient =require('mongodb').MongoClient; 
const url = 'mongodb://localhost:27017/database';
MongoClient.connect(url,function(err){
	...
});

//注:完整url为'mongodb://user:pass@localhost:port/database'
  •   操作MongoDB

   1.node-mongodb-native插入

      步骤:打开数据库->打开集合->插入数据->关闭数据库

  • find()   一次查询多条
  • insertMany()   一次插入多条,参数是数组格式   
collection.insertMany([stu1,stu2,stu3],function(err,doc){

});

    查询时需要转化为数组:

collection.find().toArray(function(err, docs){

});

   2.node-mongodb-native查询
   步骤:打开数据库->打开集合->查找文档->关闭数据库

collection.findOne({},function(err,doc){

});

 3.node-mongodb-native修改

collection.updateOne({name:'jack'},{$set:{name:'rose'}},function(err,doc){

});

4.node-mongodb-native删除

collection.deleteOne({name:'jack'},function(err,doc){

});

 

2.3 连接MySQL

先安装模块:

npm install mysql

然后连接MySQL: 

//连接MySQL
const mysql =require('mysql'); 

//创建连接
const collection = mysql.createConnection({
	host: 'localhost',
    user: 'root',
    password: 'secret'
});

//连接mysql
connection.connect(function(err){
	...
});

  终止连接:

//第1种方法
connection.end(function(err){
    ...
});

//第2种方法
connection.destroy();
//注:该方法也可以终止连接,会立即终止底层套接字,不会触发更多的事件和回调函数
  • 操作MongoDB

   1.MySQL插入
      步骤:打开数据库->打开集合->插入数据->关闭数据库

//1.insertMany()  一次插入多条,参数是数组格式   
collection.insertMany([stu1,stu2,stu3],function(err,doc){});

//2.find()   一次查询多条

   查询时需要转化为数组:

collection.find().toArray(function(err, docs){});

  2.MySQL删除修改查询

     步骤:创建连接->连接mysql->query()执行SQL语句来操作数据
     例如:查询数据,data是表名,rows是查询后返回的记录

  • 无参数查询:
connection.query('SELECT * FROM data', function(err, rows){

});
  • 有参数查询。query的第二个参数是可选参数,"?"代表占位符
const table = 'student';
connection.query('SELECT * FROM ?', [table],function(err, rows){
    
});

注:可使用 escape()方法防止SQL注入攻击(黑客提交给服务器中的数据中带有SQL语句),假设 userid是用户提供的数据

let sql = 'SELECT * FROM user WHERE userid=' + connection.escape(userid);


 

猜你喜欢

转载自blog.csdn.net/weixin_42762089/article/details/86241748