express + mongodb 搭建一个简易网站 (四)
express + mongodb 搭建一个简易网站 (四)
目前网站整体页面都已经能全部展示了,但是,整个网站还有两个块需要做完才能算完整,一个连接数据库,目前网站上的数据都是抓取的本地假数据,所以连接上数据库之后才能算是一个动态网站,第二个就是网站的登录页还没做,有登录就有注册,注册的用户数据也是需要放到数据库中去的。
至于使用什么数据库,就选择mongodb吧,选什么数据库按自己的心情来吧。这一节我们把项目连上数据库,然后对数据库进行增删改查,页面拿数据库中的数据进行展示。
1.在根目录下新建schemas文件夹,在schemas文件下新建goods.js文件,然后在goods.js添加如下代码:
var mongoose = require('mongoose');
var goodsSchemas = new mongoose.Schema({
kind: Number,
title: String,
price: String,
picUrl: String
})
// goodsSchemas 模式的静态方法
goodsSchemas.statics = {
fetch: function (cb) {
return this
.find({})
.exec(cb)
},
findByKind: function (kind, cb) {
return this
.findOne({kind: kind})
.exec(cb)
}
}
// 导出 goodsSchemas 模式
module.exports = goodsSchemas;
这里对mongoose就不介绍了,http://cnodejs.org/topic/504b4924e2b84515770103dd 和 http://www.nodeclass.com/api/mongoose.html 个人感觉不错,后一个是官方文档。看看就知道怎么用了。
在根目录下新建models文件夹,在models文件下新建goods.js文件(你没看错,和schemas下的goods.js同名),然后在goods.js添加如下代码:
var mongoose = require('mongoose');
var movieSchema = require('../schemas/goods.js'); //引入'../schemas/movie.js'导出的模式模块
// 编译生成movie模型
var goods = mongoose.model('goods', movieSchema);
// 将movie模型[构造函数]导出
module.exports = goods;
2.现在数据库模型建好了,该连接数据库了,在入口文件app.js代码修改为:
var express = require('express'); // 引入express框架
var path = require('path'); // 引入path模块
var routes = require('./routes/app');// 引入路由模块
var port = process.env.PORT || 8000; // 设置端口号:3000
var app = express(); //实例化express
var serveStatic = require('serve-static'); // 静态文件处理
app.use(serveStatic('public')); // 路径:public
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
app.listen(port); // 启动web服务。
var mongoose = require('mongoose'); // 加载mongoose模块
mongoose.connect('mongodb://localhost:27017/goods'); // 连接mongodb本地数据库imovie
console.log('MongoDB connection success!');
/* mongoose 简要知识点补充
* mongoose模块构建在mongodb之上,提供了Schema[模式]、Model[模型]和Document[文档]对象,用起来更为方便。
* Schema对象定义文档的结构(类似表结构),可以定义字段和类型、唯一性、索引和验证。
* Model对象表示集合中的所有文档。
* Document对象作为集合中的单个文档的表示。
* mongoose还有Query和Aggregate对象,Query实现查询,Aggregate实现聚合。
* */
routes(app);
console.log('server listening at ' + port);
3.这次我们就先修改导航中“所有宝贝”的内容吧,最后在routes文件下找到all.js修改代码为:
var express = require('express');
var router = express.Router();
var goods = require('../models/goods.js'); // 载入mongoose编译后的模型movie
router.get('/', function(req, res) {
// 查询数据库中所有商品数据
goods.fetch(function(err, goods) {
if (err) {
console.log(err);
}
res.render('all',{
goods: goods
})
})
})
module.exports = router;
编码搞定,现在把mongodb启动起来(没安装的去安装啊),找到mongodb的安装路径,如我自己的安装路径为“C:\Program Files\MongoDB\Server\3.4\bin”,然后在这个路劲下打开控制台输入:mongod.exe --dbpath D:\qp_wx_supernano_com\qp-wx13.supernano.com\db,
注意到--dbpath后面那一串路径没,这个路径自己配置啊,数据想存哪里自己就改。正常情况下,mongodb启动起来了(默认启动起来了啊)。
然后继续在“C:\Program Files\MongoDB\Server\3.4\bin”这个路径下打开控制台,没错还是这个路径,在控制台输入mongo,搞定,你现在已经进入本地数据库了,可以增删改查了。像这样:
最后启动项目node app,这个熟悉了吧,可以打开浏览器:localhost:8000看看效果了。是不是发现没有任何商品展示?像这样:
那就没错了,因为你此时数据库里面没有数据,有商品展示就要爆炸了。
找到开始输入mongo命令的那个控制台,输入show dbs,看看有哪些数据库,如下图:
项目中没有goods数据库,那就新建一个,输入use goods,就新建一个数据库goods,如下图:
最后在goods数据库中新建一个集合goods(类似mysql的表),如下图:
现在就可以插入数据了,输入db.goods.insert({url: 'https://img.alicdn.com/imgextra/i3/1020250042/TB2qHT5pypnpuFjSZFkXXc4ZpXa_!!1020250042-0-beehive-scenes.jpg_180x180q70', title: '女生上衣', price: '229元', kind: 1}),现在在浏览器看看效果,是不是像这样:
这次我们实现了导航中“所有宝贝”的数据库链接,其他的页面其实就很简单了(只要注意数据库中的数据过滤条件),有兴趣的同学可以自己去试试,其他页面就留到下次去了。