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}),现在在浏览器看看效果,是不是像这样:

这次我们实现了导航中“所有宝贝”的数据库链接,其他的页面其实就很简单了(只要注意数据库中的数据过滤条件),有兴趣的同学可以自己去试试,其他页面就留到下次去了。

express + mongodb 搭建一个简易网站 (四)的更多相关文章

  1. express + mongodb 搭建一个简易网站 (三)

    express + mongodb 搭建一个简易网站 (三) 前面已经实现了基本的网站功能,现在我们就开始开搞一个完整的网站,现在整个网站的UI就是下面的这个样子. 我们网站的样子就照着这个来吧. 1 ...

  2. express + mongodb 搭建一个简易网站(二)

    express + mongodb 搭建一个简易网站 (二) 在搭建网站(一)中,实现了简单的路由功能,这离一个完整的网站还差的有点远,继续撸代码吧. 1.首先在根目录下新建一个views文件夹,用来 ...

  3. express + mongodb 搭建一个简易网站(一)

    express + mongodb 搭建一个简易网站(一) 前言:后台使用node.js的express框架,数据库使用mongodb,模板使用ejs.大概就这些. 开始第一个简易网站之旅吧.... ...

  4. express + mongodb 搭建一个简易网站 (五)

    前面已经将导航中的“所有宝贝”页面连上了mongodb,现在我们就把其他的页面脸上数据库,将整个网站全部实现. 打开routes文件,找到jacket.js,将里面的代码修改如下: var expre ...

  5. 从无到有,用Nodejs+express+mongodb搭建简易登陆系统

    前端处理server表示很蛋疼,初学Node,虽然感觉异常强大,但是学起来还是有些吃力的,Node是工具,它不是万能的,搭建一个系统还是需要借助其他一些工具,对于我这个没怎么接触server的前端来说 ...

  6. 使用EF Code First搭建一个简易ASP.NET MVC网站,允许数据库迁移

    本篇使用EF Code First搭建一个简易ASP.NET MVC 4网站,并允许数据库迁移. 创建一个ASP.NET MVC 4 网站. 在Models文件夹内创建Person类. public ...

  7. 利用git+hugo+markdown 搭建一个静态网站

    利用git+hugo+markdown 搭建一个静态网站 一直想要有一个自己的文档管理系统: 可以很方便书写,而且相应的文档很容易被分享 很方便的存储.管理.历史记录 比较方面的浏览和查询 第一点用M ...

  8. Angularjs,WebAPI 搭建一个简易权限管理系统

    Angularjs,WebAPI 搭建一个简易权限管理系统 Angularjs名词与概念(一)   1. 目录 前言 Angularjs名词与概念 权限系统原型 权限系统业务 数据库设计和实现 Web ...

  9. Django搭建博客网站(四)

    Django搭建博客网站(四) 最后一篇主要讲讲在后台文章编辑加入markdown,已经在文章详情页对markdown的解析. Django搭建博客网站(一) Django搭建博客网站(二) Djan ...

随机推荐

  1. ML(2): 术语及算法分类汇总

    机器学习术语 归纳总结机器学习相关的基本术语,以一批西瓜的数据为例,例如:(色泽=青绿:根蒂=蜷缩:敲声=浊响),(色泽=乌黑:根蒂=稍蜷:敲声=沉闷),(色泽=浅白:根蒂=硬挺:敲声=清脆)... ...

  2. 【python】字符串函数

    1.String模块中的常量: string.digits:数字0~9 string.letters:所有字母(大小写) string.lowercase:所有小写字母 string.printabl ...

  3. ALGO-2_蓝桥杯_算法训练_最大最小公倍数

    问题描述 已知一个正整数N,问从1~N中任选出三个数,他们的最小公倍数最大可以为多少. 输入格式 输入一个正整数N. 输出格式 输出一个整数,表示你找到的最小公倍数. 样例输入 样例输出 数据规模与约 ...

  4. 字符串strip相关函数

    s.strip(rm) 删除s字符串中开头.结尾处,位于 rm删除序列的所有字符,但只要遇到非rm序列中的字符就停止s.lstrip(rm) 删除s字符串中开头处,位于 rm删除序列的所有字符,,但只 ...

  5. [转]html 下拉框级联

    <html> <head> <title>html 下拉框级联</title> <meta charset="UTF-8"/& ...

  6. [UE4]C++调用蓝图函数:BlueprintImplementableEvent函数说明符用法

    用BlueprintImplementableEvent标明的函数在C++代码中不需要有方法体,方法体在蓝图中实现. 用法: 1,现在C++头文件中定义函数名 UFUNCTION(BlueprintI ...

  7. mysql存储过程中遍历数组字符串的两种方式

    第一种:多次使用substring_index()的方法 DELIMITER $$ DROP PROCEDURE IF EXISTS `array`$$ CREATE  PROCEDURE `arra ...

  8. Scipy

    插值interpolate模块 计算插值有两个基本方法: 1.对一个完整的数据集去拟合一个函数(一条线穿过所有数据集的点) 2.对数据集的不同部分拟合出不同的函数,而函数之间的曲线平滑对接 一维插值 ...

  9. ESB初步配置文件认识

    每个项目的都有各自的场景,但是其实往小处说,场景的处理基本都是很相似,之前做copy文件的程序,其实就是一种很常见的ETL的过程(转移文件,异构系统通过文件系统交换数据,存在数据同步). 了解一下ET ...

  10. 《opencv学习》 之 OTSU算法实现二值化

    主要讲解OTSU算法实现图像二值化:    1.统计灰度级图像中每个像素值的个数. 2.计算第一步个数占整个图像的比例. 3.计算每个阈值[0-255]条件下,背景和前景所包含像素值总个数和总概率(就 ...