Magren

Magren

Idealist & Garbage maker 🛸
twitter
jike

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

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。