Magren

Magren

Idealist & Garbage maker 🛸
twitter
jike

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 以更新依赖包。

{
  "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 于根目录

文件代码如下:

{
  	"presets": ["stage-3"],
  	"plugins": [
  		"transform-async-to-generator",
        "transform-es2015-modules-commonjs",
        "transform-export-extensions"
    ]
}
新建 index.js 于根目录

文件代码如下:

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

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

node.js 操作 MongoDB 数据库#

依赖#

在项目根目录下安装 Mongoose

npm install mongoose --save

链接数据库#

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

'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 中引入

import db from './mongodb/db';

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

添加数据#

//引入模块
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 的数据。

读取数据#

//引入模块
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 模块的代码单独出来。

更新数据#

//引入模块
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)
})

删除数据#

//引入模块
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 数据库的操作,改天尝试做一个小项目,部署到服务器上,感觉又会踩很多坑……
但如果没有实践也只是纸上谈兵,加紧自己学习的脚步吧。
毕竟都已经大三了啊。✊

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。