开启服务
- 安装express 。npm install express
- 引入express。const express = require(‘express’);
- 监听端口。const app = express();app.listen(port);
引入模板
- npm install hbs –save
- const hbs = require(‘hbs’);
- app. set(‘view engine’ , ‘hbs’);
- app.js 同级目录创建views文件夹。创建layout.hbs为模板文件。
数据连接
- 安装mongoDB
- npm install –save mongoose(一种数据映射)
- 建好文件夹的mvc层,schema ,model , controller,views
- view下写好hbs页面
- schema下写好js中的类
- model做中间操作
- controller下做数据存储操作
- 对于post提交表单,需要npm install –save body-parser处理json结构。然后在毁掉函数req.body.obj获取json对象。
在schema字段加unique : true时 ,save后出现了 E11000 duplicate key error collection 。错误,等待解决。暂时不增设unique字段。
hbs简单语法
{{#if user}}
{{else}}
{{/if}}
可以由render()方法设置数据模板
res.render('signup' , {user: {name : 'magic' , age : 18}});
登录模块
登录模块首先完成注册的流程,controller-model-schema的save方法。并且要注意一些代码的细节,console(”当前错误页+错误方法”)还有一些if null的判断,以及用户名唯一的判断等。要注意细节。
然后就是登录模块。方法同上
这里要注意回调函数的作用 , 在node里 , 经常会出现上下关系的代码 , 却不会从上到下执行。若想在某一个方法执行完成才去执行另一段代码,需要采用回调的方式
加密
登录模块的密码需要加密存进数据库。
所以要先安装加密模块。 npm install bcrypt –save-dev
由于暂时不深入研究,只需要能转码存入数据库和登录时的验证即可。
session
登录注册基本功能完成后 , 就考虑保存登录用户的状态,以更新页面信息。
二级菜单
绝对定位来实现。
.class.class {css} class=”user item”会继承父类的css属性
二级菜单的显示和隐藏可以用onclick实现。在使用document.onclick时会设计dom的捕获和冒泡,要判断event.target而排除子元素。
论坛模块
发文章
使用markdown-it插件 npminstall markdown-it –save
按官方实例引入, console后发现得到了想得到的html标签,取不知如何在hbs模板渲染。思考了一会翻看hbs api最终还是使用res.render而不是res.send等方法 , 在.hbs文件中使用三重大括号{{{}}} 而使内容不对标签进行转义。
布局
关于css , 目前有一个疑惑的bug , 在firefox浏览器下 , 连续点击刷新会让css无法加载,导致页面没有样式。
重新修改了css样式,使用flex流式布局,使论坛有基础的响应式布局。
优化登录模块,增加表单验证。这里我使用了validate.js前端插件。
其中报错
The resource from “http://139.199.168.15:3000/libs/validate.js” was blocked due to MIME type mismatch (X-Content-Type-Options: nosniff).
其实就是文件路径写错了,找了半天。。。