node.js + MongoDB

最近开学事情逐渐多了起来,星空、康课还有学校的课程……一切都开始逐渐步入正轨,唯独我的学习之路还在跑偏。
经常会停下来不知道学什么,也提不起动力学,担心自己学的东西派不上用场,也担心自己半途而废。
也难怪有万事开头难这种说法了。
但是一旦行动起来,忙起来的时候就会感到充实。只要动起来,无论结果怎样,都总比没有尝试过的好。
但行好事,莫问前程

我也纠结过是学习用node.js还是Java去操作后端数据库。
有的人说学node.js,前端工程师都要会这个;也有的人说学java,去学ssm,学spring全家桶;还有的人说node.js没有前途;
最后在网上看到了一个答案,
他说:程序员本身不该受语言的约束,更不该受框架的约束。什么样的场景用什么样的工具。
所谓的没有前途一直都是错误的使用正确的工具。
你得有一颗拿c++造宇宙飞船的心。🚀

node.js是什么?

根据官方的说法:

Node.js® is a JavaScript runtime built on Chrome’s V8 JavaScript engine.

Node.js 就是一個能执行 JavaScript 的环境,而 V8 则是主流浏览器 - Google Chrome 的 JavaScript 引擎,负责、执行 JavaScript。
Node.js再加上一系列的c/c++套件,成功的让我们的服务器端也可以执行JavaScript。

环境安装

node.js安装

下载地址:Node.js官网下载

MongoDB数据库

下载地址:MongoDB官网下载

启动服务

在MongoDB文件夹下的bin目录下用命令行输入:**.\mongo** 来启动服务

可视化工具 Robo3T

用于可视化操作MongoDB数据库,下载地址:Robo3T

express

Express 是一个简洁而灵活的 node.js Web应用框架, 提供了一系列强大特性帮助你创建各种 Web 应用,和丰富的 HTTP 工具。

express脚手架

express脚手架安装:

npm install -g express-generator

创建express项目:

express test

cd test

npm install

运行:

npm start

浏览器访问:

http://localhost:3000/

express脚手架引入babel

引入babel是为了转译 ECMAScript 2015+ 至可兼容浏览器的版本,说白了就是为了让我们使用ES6。

依赖

修改后记得执行npm install以更新依赖包。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
{
"name": "test",
"version": "0.0.0",
"private": true,
"scripts": {
"start": "node ./index.js",
"devstart": "nodemon ./index.js"
},
"dependencies": {
"babel": "^6.23.0",
"babel-cli": "^6.24.1",
"babel-core": "^6.24.0",
"babel-preset-es2015": "^6.24.0",
"babel-preset-stage-3": "^6.22.0",
"babel-register": "^6.24.0",
"cookie-parser": "~1.4.4",
"debug": "~2.6.9",
"express": "~4.16.1",
"http-errors": "~1.6.3",
"jade": "~1.11.0",
"mongoose": "^5.10.5",
"morgan": "~1.9.1"
},
"devDependencies": {
"babel-plugin-transform-async-to-generator": "^6.24.1",
"babel-plugin-transform-es2015-classes": "^6.24.1",
"babel-plugin-transform-es2015-modules-commonjs": "^6.24.1",
"babel-plugin-transform-export-extensions": "^6.22.0"
}
}

新建.babelrc于根目录

文件代码如下:

1
2
3
4
5
6
7
8
{
"presets": ["stage-3"],
"plugins": [
"transform-async-to-generator",
"transform-es2015-modules-commonjs",
"transform-export-extensions"
]
}

新建index.js于根目录

文件代码如下:

1
2
require('babel-core/register');
require('./bin/www');

此时语法支持import等es6语法。

node.js操作MongoDB数据库

依赖

在项目根目录下安装Mongoose

npm install mongoose –save

链接数据库

利用mongoose来链接MongoDB
在项目中创建db.js文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
'use strict';

import mongoose from 'mongoose';

mongoose.connect('mongodb://localhost:27017/test', { useNewUrlParser: true });

const db = mongoose.connection;

db.once('open' ,() => {
console.log(
'连接数据库成功'
);
})

db.on('error', function(error) {
console.error(
'Error in MongoDb connection: ' + error
);
mongoose.disconnect();
});

db.on('close', function() {
console.log(
'数据库断开,重新连接数据库'
);
});

export default db;

接着在app.js中引入

1
import db from './mongodb/db';

这个时候运行项目会在MongoDB中创建一个test的库,但是由于里面没有数据所以并不会显示出来。

添加数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
//引入模块
import mongoose from 'mongoose';
import db from './mongodb/db';
// 创建schema
// schema是MongoDB里的一个集合,也可以说是库中的一张表
let testSchema = new mongoose.Schema({
name: String,
age: Number
})

// 通过connection和schema创建model
let testModel = connection.model('test1', testSchema);


// 通过实例化model创建文档
let test = new testModel({
name: 'Magren',
age: 20
})

// 将文档插入到数据库,save方法返回一个Promise对象。
test.save().then((doc) => {
console.log(doc)
})

添加成功后MongoDB数据库里会多了test1这么一个表,同时表中会多了一条name为Magren,age为20的数据。

读取数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//引入模块
import mongoose from 'mongoose';
import db from './mongodb/db';

let testSchema = new mongoose.Schema({
name: String,
age: Number
})

let testModel = connection.model('test1', testSchema);

//查询条件,查询name为Magren的记录,格式为键值对
//查询条件为空的时候即查询该表中的全部数据
testModel.find({name: 'Magren'}).then(doc => {
console.log(doc);
})

为了复用代码,降低耦合度,一般将Schema以及Model模块的代码单独出来。

更新数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//引入模块
import mongoose from 'mongoose';
import db from './mongodb/db';

let testSchema = new mongoose.Schema({
name: String,
age: Number
})

let testModel = connection.model('test1', testSchema);

//第一个参数是查询条件,找到name为Magren这条数据
//第二个参数是要修改的值
testModel.updateMany({name: 'Magren'},{age: 18}).then((result)=>{
console.log(result)
})

删除数据

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//引入模块
import mongoose from 'mongoose';
import db from './mongodb/db';

let testSchema = new mongoose.Schema({
name: String,
age: Number
})

let testModel = connection.model('test1', testSchema);

//删除name为Magren的数据
testModel.removeMany({name: 'Magren'}).then((result)=>{
console.log(result)
})

最后

现在只是学习了基本的node.js对MongoDB数据库的操作,改天尝试做一个小项目,部署到服务器上,感觉又会踩很多坑……
但如果没有实践也只是纸上谈兵,加紧自己学习的脚步吧。
毕竟都已经大三了啊。✊