node.js 之 express框架+MongoDB(前端使用vue)

来源:互联网 发布:java mongodb 连接池 编辑:程序博客网 时间:2024/05/29 19:55

1. 下载安装node环境,Mac、linux、windows各不相同

2. 安装后输入: node -v查看,出现版本号则安装成功

3. 打开terminal,安装express框架,(为了更快速,更易安装成功,建议先安装淘宝镜像,使用cnpm)

淘宝镜像地址:http://npm.taobao.org/mirrors/node

4. 开始安装

cnpm install -g express-generatorexpress servercd servercnpm install

bin:可执行文件,做封装,通过http模块创建server,监听端口、启动服务,通过www启动项目

app.js:入口,本身依赖express;

           path自带模块;

           favion浏览器logo;

           logger:日志输出;

           cookie-parser:cookie信息进行转化;

           bodyParser对返回值进行转化;

           先加载index再加载user两个路由

           express.static(path.jion)设置静态目录

public:静态文件js、css

routes:路由,浏览器访问地址,代表controller

views:jade或其他模版文件,运行时自动加载view文件夹中文件,模板引擎可以换成ejs或html等

package.json

  • 将模板引擎改为html(jade用起来还是不太习惯):将jade文件删掉,修改app.js
    app.engine('.html',ejs.__express);app.set('view engine', 'html');
    var ejs = require('ejs');

    • 回到上层菜单:cd ..
    • cnpm install ejs --save
    • 在views文件夹下建立一个index.html
    • 编辑app.js文件:
    • 启动npm start
5. 自动重启:cnpm install supervisor

启动命令:supervisor ./bin/www

在地址栏:localhost:3000启动


6. MongoDB,这个参考之前发的MongoDB环境搭建

7,基于express开发

安装Mongoose:cnpm install mongoose --save

创建model:在server中创建一个models文件夹

var mongoose = require('mongoose')var Schema = mongoose.Schema;var productSchema = new Schema({  "productId":{type:String},  "productName":String,  "salePrice":Number,  "checked":String,  "productNum":Number,  "productImage":String});module.exports = mongoose.model('Good',productSchema);

首先引入mongoose,然后定义model(productSchema)然后exports,后定义路由

创建路由:

1) 先在app里面定义一级路由,

var goods = require('./routes/goods')app.use('/goods', goods);
2) 在 routes设置子路由,goods.js

var express = require('express');var router = express.Router();var mongoose = require('mongoose');var Goods = require('../models/goods');//加载模型表//连接MongoDB数据库mongoose.connect('mongodb://127.0.0.1:27017/dumall');mongoose.connection.on("connected", function () {  console.log("MongoDB connected success.")});mongoose.connection.on("error", function () {  console.log("MongoDB connected fail.")});mongoose.connection.on("disconnected", function () {  console.log("MongoDB connected disconnected.")});//查询商品列表数据router.get("/list", function (req,res,next) {  let page = parseInt(req.param("page"));  let pageSize = parseInt(req.param("pageSize"));  let priceLevel = req.param("priceLevel");  let sort = req.param("sort");  let skip = (page-1)*pageSize;  var priceGt = '',priceLte = '';  let params = {};  if(priceLevel!='all'){    switch (priceLevel){      case '0':priceGt = 0;priceLte=100;break;      case '1':priceGt = 100;priceLte=500;break;      case '2':priceGt = 500;priceLte=1000;break;      case '3':priceGt = 1000;priceLte=5000;break;    }    params = {      salePrice:{          $gt:priceGt,          $lte:priceLte      }    }  }  let goodsModel = Goods.find(params).skip(skip).limit(pageSize);  goodsModel.sort({'salePrice':sort});  goodsModel.exec(function (err,doc) {      if(err){          res.json({            status:'1',            msg:err.message          });      }else{          res.json({              status:'0',              msg:'',              result:{                  count:doc.length,                  list:doc              }          });      }  })});//加入到购物车router.post("/addCart", function (req,res,next) {  var userId = '100000077',productId = req.body.productId;  var User = require('../models/user');  User.findOne({userId:userId}, function (err,userDoc) {    if(err){        res.json({            status:"1",            msg:err.message        })    }else{        console.log("userDoc:"+userDoc);        if(userDoc){          var goodsItem = '';          userDoc.cartList.forEach(function (item) {              if(item.productId == productId){                goodsItem = item;                item.productNum ++;              }          });          if(goodsItem){            userDoc.save(function (err2,doc2) {              if(err2){                res.json({                  status:"1",                  msg:err2.message                })              }else{                res.json({                  status:'0',                  msg:'',                  result:'suc'                })              }            })          }else{            Goods.findOne({productId:productId}, function (err1,doc) {              if(err1){                res.json({                  status:"1",                  msg:err1.message                })              }else{                if(doc){                  doc.productNum = 1;                  doc.checked = 1;                  userDoc.cartList.push(doc);                  userDoc.save(function (err2,doc2) {                    if(err2){                      res.json({                        status:"1",                        msg:err2.message                      })                    }else{                      res.json({                        status:'0',                        msg:'',                        result:'suc'                      })                    }                  })                }              }            });          }        }    }  })});module.exports = router;

实现功能:与前端交互时,因为vue用的是8080端口


改成以下,访问接口时转发到3000的node接口