基于Express实现商品列表查询接口

版权声明: https://blog.csdn.net/xyphf/article/details/84421747

一、安装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:[email protected]: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端口

我们发现数据已经请求成功了

猜你喜欢

转载自blog.csdn.net/xyphf/article/details/84421747