最近开学事情逐渐多了起来,星空、康课还有学校的课程…… 一切都开始逐渐步入正轨,唯独我的学习之路还在跑偏。
经常会停下来不知道学什么,也提不起动力学,担心自己学的东西派不上用场,也担心自己半途而废。
也难怪有万事开头难这种说法了。
但是一旦行动起来,忙起来的时候就会感到充实。只要动起来,无论结果怎样,都总比没有尝试过的好。
但行好事,莫问前程
我也纠结过是学习用 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 数据库的操作,改天尝试做一个小项目,部署到服务器上,感觉又会踩很多坑……
但如果没有实践也只是纸上谈兵,加紧自己学习的脚步吧。
毕竟都已经大三了啊。✊