区分页面的变与不变
首页拆分
index.json
{
slides: [
{
id: 1,
title: 'xxx',
img: '/images/1.png',
},
{
id: 2,
title: 'yyy',
img: '/images/1.png',
}
],
suggestion: [
{
id: 1,
title: '超度',
img: '/images/1.png',
}
],
flower_current: [],
flower: [
{
cid: 1,
title: '春',
items: [
]
},
{
cid: 2,
title: '夏',
items: [
]
}
],
gardon: [
{
cid: 1,
title: '春',
items: [
]
},
{
cid: 2,
title: '夏',
items: [
]
}
]
}
let data = require('../data/index.json')
res.render('mobile/index', data)
实现移动端首页效果
实现从数据库里查询真实的数据。目前我们知道我们要的数据是../data/index.json
这样的数据,那么我们就从模型里获取这些数据不就ok了么?
回想一下商品模型
推导出商品模型
那么如何处理呢?
还记migrate写法么?其实就是纯db操作
#!/usr/bin/env node
'use strict'
var path = require('path')
global.log = console.log
// 完成发货单,并生成对应账单
global.$config = require('../config')
require('../db')
var User = require('../app/models/user')
// console.log(User)
User.find({}, function (err, docs) {
if (err) {
console.log(err)
}
console.dir('docs')
console.dir(docs)
// process.exit()
})
如果我们把它变成
User.create({username: 'stuq',password: '000000')
是不是批量创建数据库就非常简单了。
结合上面的需求
想想如何写一个脚本就能完成所有数据的构造?
有了上面造的数据,是不是就可以查询了?
最简单的办法,查询出所有商品,然后遍历即可取出结果集,但一般不会这么做,如果商品像锤子商城数量较少是可行的,如果数量非常大,一定会有性能问题的。
很对时候,多次数据库查询都会比直接遍历要好
为了拼一个json,我竟然查了4次数据库?
不必惊讶,对于mongodb这样的nosql来讲,可能每次都是毫秒级别的,只要控制整个请求在200ms左右就可以,剩下的就是之前讲到的mongoose优化了(索引,执行计划,profile,sharding,replset等)。
如果要是换成mysql之类的rdbms,查询4次肯定是受不了的,那么怎么做呢?
前面讲了,拼json的几种方法,能不能拼一次,以后就直接访问静态页面呢?
之前是
首页->查询db->返回html
现在改成2步
对比一下
至此,所有的操作都是商品表
首先看一下,分类和商品之间的关系
商品模型
一个商品属于1个分类,一个分类下面有多个商品
即
分类和商品是一对多关系
即分类id是商品表里的一个字段
ProductSchema = new Schema({
...
category_id: {
type: Schema.ObjectId,
ref: ‘Category’
}
});
改造之前的代码
改成
剩下的就是
示意
原则:先整体分析,避免少字段,反复重构问题,同时遵守kiss原则
如果对数据库不太熟的话,推荐学一下
说明:常见的关系型数据库来描述er模型比较多。我们用mongodb也是一样的,处理查询不太一样以外,其他都是一样的。
真实的项目也这样做么?
这种是对于有经验的人,对于新手而言,很难做到尽善尽美的设计,所以需要大家理解这些设计是如何推导出来的,这是非常重要的。
狼叔说:
有了互联网,技巧性的东西不在是秘密,而很多经营的东西才是大家在未来的差异
希望大家多多思考,增长经验,下一节我们会讲具体实现。