node.js 之 express框架+MongoDB(前端使用vue)
1. 下载安装node环境,Mac、linux、windows各不相同2. 安装后输入: node -v查看,出现版本号则安装成功3. 打开terminal,安装express框架,(为了更快速,更易安装成功,建议先安装淘宝镜像,使用cnpm)淘宝镜像地址:http://npm.taobao.org/mirrors/node4. 开始安装cnpm install -g expres
1. 下载安装node环境,Mac、linux、windows各不相同
2. 安装后输入: node -v查看,出现版本号则安装成功
3. 打开terminal,安装express框架,(为了更快速,更易安装成功,建议先安装淘宝镜像,使用cnpm)
淘宝镜像地址:http://npm.taobao.org/mirrors/node
4. 开始安装
cnpm install -g express-generator
express server
cd server
cnpm 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
启动命令: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接口
更多推荐
所有评论(0)