node学习笔记
node是一门后端语言,由一名天才少年意外发明的,可他的初衷是搭建一个服务器。
node采用js语法,需引入相应的模块才能实现对应的功能。其中主要分为核心模块、第三方模块和自定义模块。其中核心模块中包含url、http和querystring等,espress框架属于第三方模块,mongoose则属于自定义模块。
express框架可以直接创建服务器,脚手架可以直接生成项目,这极大方便了我们的操作。
数据库可以分为两类,一种是关系型数据库,比如说mysql,另一种是非关系型数据库,比如说MongoDB,MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。MongoDB中有命令行操作,一些数据库的命令、集合的操作和文档操作。而node结合MongoDB便可以实现增删改查操作了。
MongoDB 创建数据库
use DATABASE_NAME
如果数据库不存在,则创建数据库,否则切换到指定数据库。
use runoob
switched to db runoob
db
runoob
查看所有数据库,可以使用 show dbs 命令:
但要显示它,需要向 runoob 数据库插入数据。
db.runoob.insert({"name":"123456"})
WriteResult({ "nInserted" : 1 })
show dbs
runoob 0.000GB
MongoDB 中默认的数据库为 test,如果你没有创建新的数据库,集合将存放在 test 数据库中。
注意: 在 MongoDB 中,集合只有在内容插入后才会创建! 就是说,创建集合(数据表)后要再插入一个文档(记录),集合才会真正创建。
集合操作:
db.createCollection(name, options)
db.createCollection("collName", {size: 20, capped: true, max: 100});
name: 要创建的集合名称
options: 可选参数, 指定有关内存大小及索引的选项
文档(数据)操作
增:
db.collection.insertOne():向指定集合中插入一条文档数据
db.collection.insertMany():向指定集合中插入多条文档数据
删
db.collection.deleteOne():向指定集合中插入一条文档数据
db.collection.deleteMany():向指定集合中插入多条文档数据
改
db.col.updateOne({key: value}, {$set: {key: value}}):向指定集合中插入一条文档数据
db.col.updateMany({key: value}, {$set: {key: value}}):向指定集合中插入多条文档数据
db.col.updateOne({key: value}, { $inc: {key: num}}) 修改某一条数据的某一个字段key的自增num
查
db.users.find({},{}).pretty() :查询所有的数据,显示所有的字段
条件查询:db.users.find({},{_id: 0}).pretty() 不显示_id字段
db.users.find({},{_id: 0, username: 1}).pretty() // 不显示_id字段,只显示username字段'
或查询:db.users.find( {
$or: [ { password : '123' } , { password : '456' } ]
} ,
{ _id: 0 }
) . pretty ()
区间查询:db.users.find({age: {$gt: 24} }, {_id:0}).pretty()
模糊查询:db.users.find({ $or: [{username: /纯/}, {username: /强/}]}, {_id:0}).pretty()
排序:db.users.find({}, {_id: 0}).sort({age: 1}).pretty()
1表示按照key值升序,为-1表示降序
查询数据并且计数:db.users.find({age: { $gte: 18, $lte: 20 } }, { _id:0 }).count()
node与mongoose结合步骤:
1、打开终端
2、打开数据库的连接池
3、在node中安装mongoose
4、引入mongoose模块
const mongoose = require(‘mongoose’);
5、通过mongodb协议地址登录服务器并查看状态
const DB_URL = ‘mongodb://127.0.0.1:27017/testest’;
mongoose.connect(DB_URL, { useNewUrlParser: true });
mongoose.connection.on(‘connected’, () => { console.log(‘数据库连接成功’) })
mongoose.connection.on(‘disconnected’, () => { console.log(‘数据库连接失败’) })
6、 自定义模块(db.js)并暴露
mongoose.connection.on(‘error’, () => { console.log(‘数据库连接异常’) }) module.exports = mongoose
再创建一个user.js通过引入db.js来实现创建集合,设计数据表。
那么其他的文档操作如增删改查就可以通过引入user.js来进行了。
为了以后的使用,这里的mongodb其实是可以进行封装的;
module.exports = {
insert (insertData) { insertData.save(err => { if (err) throw err; console.log(‘insert success’); }) },
delete: (col, type, deleteData) => { col[type](deleteData, err => { if (err) throw err; console.log(‘delete success’); }) },
update:
function (col, type, whereObj, updateObj) {
col[type] (
whereObj, updateObj,
err => { if (err) throw err; console.log(‘update success’); }
)
},
find (col, whereObj, showObj) { col.find(whereObj, showObj).exec((err, data) => { if (err) throw err; console.log(data); }) },
sort (col, whereObj, showObj, sortObj) {
col.find(whereObj, showObj).sort(sortObj).exec(
(err, data) => { if (err) throw err; console.log(data); }
)
}
}
node是如何搭建一个后台管理系统的呢?(大体步骤与思路)
其过程可以用admin-lte模板与express的结合来实现。
1、复制admin-lte中的所需的页面和静态文件(css),其中路径加/表示绝对路径。
2、分割页面使用ejs的include语法导入相应模块。
3、修改menu菜单、确定条目。
4、创建相关路由文件(index.js、user.js、product.js)
5、修改app.js引入路由文件、注册相关路由并重启路由。
完成以上步骤便可以在浏览器中输入/user/product查看效果了。
当然后台管理系统的登录功能可以通过缓存cookie、session、token配合页面login.ejs、相关路由和状态来实现。