最近開学事情逐渐多了起來,星空、康課還有學校的課程…… 一切都開始逐渐步入正軌,唯獨我的學習之路還在跑偏。
經常會停下來不知道學什麼,也提不起動力學,擔心自己學的東西派不上用場,也擔心自己半途而廢。
也難怪有萬事開頭難這種說法了。
但是一旦行動起來,忙起來的時候就會感到充實。只要動起來,無論結果怎樣,都總比沒有嘗試過的好。
但行好事,莫問前程
我也紐結過是學習用 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
瀏覽器訪問:
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 數據庫的操作,改天嘗試做一個小項目,部署到伺服器上,感覺又會踩很多坑……
但如果沒有實踐也只是紙上談兵,加緊自己學習的腳步吧。
畢竟都已經大三了啊。✊