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 數據庫的操作,改天嘗試做一個小項目,部署到伺服器上,感覺又會踩很多坑……
但如果沒有實踐也只是紙上談兵,加緊自己學習的腳步吧。
畢竟都已經大三了啊。✊

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。