一、安装Mongoose
本次查询接口是基于Mongoose来实现的,Mongoose它是对MongoDB的一个封装,就好比我们过去使用数据库使用JDBC,但是我们通常也对JDBC进行封装。
Mongoose提供了一系列的增删改查的API,方便我们对MongoDB进行操作。
二、创建model
Mongoose需要创建一个model,通过model它就是个实体,通过实体对MongoDB数据库进行关联。
三、创建路由
紧接着通过路由里面去查接口,通过路由里面去调用model实体,通过model实体的API来去查询数据库。
四、基于mongoose,实现商品列表的查询功能
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
首先在server目录下创建一个models文件夹
在models目录下建一个叫做goods.js的model
nodeJS是基于Common规范,Common规范是通过module.exports来实现的
安装mongoose
npm i mongoose --save
在goods.js的model中加载mongoose
var mongoose = require('mongoose')
通过mongoose的Schema来获取表模型
var Schema = mongoose.Schema;
定义一个商品的模型,去new一个Schema;
var produtSchema = new Schema({
"productId":String,
"productName":String,
"prodcutPrice": Number,
"prodcutImg": String
});
在通过module.exports将这个模型输出
module.exports = mongoose.model('Good',produtSchema);
输出去以后,我们就可以基于这个模型去调用它的Api方法,这时model实现层
在routes路由文件夹下面在建一个goods.js
现在app.js里面设定一级路由
var goods = require('./routes/goods')
app.use('/goods',goods);
在router/goods.js的二级路由
先获取路由文件,
通过express框架的对象去拿到当前的路由
所以要先引入express
var express = require('express');
var router = express.Router();
紧接着需要引入mongoose
var mongoose = require('mongoose');
紧接着加载模型表
var Goods = require('../models/goods');
接着连接数据库,使用mongoose连接数据库的驱动
有密码的登录
mongodb://用户名:密码@IP地址:端口号/数据库名
mongoose.connect('mongodb://root:123456@127.0.0.1:27017/dumall')
无密码的登录
mongodb://IP地址:端口号/数据库名
mongoose.connect('mongodb://127.0.0.1:27017/dumall')
通过mongoose.connect.on的形式去监听数据库有没有连接成功
connected表示连接成功,它里面有一个回调,
mongoose.connection.on("connected",function () {
console.log("MongoDB connected success.")
})
连接失败,去监听error
mongoose.connection.on("error",function () {
console.log("MongoDB connected fail.")
})
连接断开,监听disconnected
mongoose.connection.on("disconnected",function () {
console.log("MongoDB connected disconnected.")
})
实现路由,这个是二级路由,通过get获取
next是往后继续执行的对象
router.get("/", function (req,res,next) {
res.send("hello,goods list .");
})
通过module.exports进行输出,这样才能加载到
module.exports = router;
启动 node server/bin/www
打开 http://127.0.0.1:3000/goods
这时候我们发现hello,goods list .已经输出了,现在我们开始去查询mongoDB数据库
我们拿到上面引入的model模型Goods,model模型提供了一个API叫做find去查找
res.json就是输出一个json文件
router.get("/", function (req,res,next) {
// 第一个是参数,目前没有入参
// 返回的是两个参数,第一个是报错err,第二个是文档
Goods.find({}, function (err,doc) {
if(err) {
res.json({
status:'1',
msg:err.message
});
} else {
// 如果没有报错就把结果输出
res.json({
status:'0',
msg:'',
result:{
count: doc.length,
list: doc
}
});
}
});
})
再次访问http://127.0.0.1:3000/goods, 我们发现数据就请求到了
我们在定义集合的时候一定要加一个s,如goods
我们通过model定义一个Goods,为什么就能找到goods这个表【集合】呢
实际上我们通过定义Good,它会自动和后面加s的goods进行关联,就找到这个集合了,
如果这个goods没有s的话,它和表关联就关联不上去
如果goods没有加s,我们就要明确通过第三个参数明确和哪个集合进行关联
既然后端实现了,那么前端必然要进行请求和渲染
这里请求我们需要进行一下代理,因为localhost:3000已经跨域了
所以要配置一下代理,在config/index.js下有个dev>proxyTable,它是个代理插件
这个代理插件实际上就是方便我们去做转发的,有了这个代理插件之后,我们就可以去指定,不用去跨域了
否则这个接口就没办法调了,除非通过vue-resource这种插件才能去写;
这就是说当我们访问/goods的时候,默认转发到http://localhost:3000端口
我们发现数据已经请求成功了