使用nodejs进行WEB开发
这里,准备从零开始用nodejs实现一个微博系统。功能包括路由控制、页面模板、数据库访问、用户注册、登录、用户会话等内容。
将会介绍Express框架、MVC设计模式、ejs模板引擎以及MongoDB数据库的操作。
准备工作
使用http模块,Express框架,
nodejs的抽象如此之差,把不该有的细节暴露给开发者。你可以用它做任何HTTP服务器能做的事情,不仅仅是做一个网站,甚至实现一个HTTP代理服务器都行。
Express是WEB开发框架。
实现:
为HTTP模块提供了更高层的接口,
路由控制,
模板解析支持,
动态视图,
用户会话,
CSRF保护,
静态文件服务,
错误控制器,
访问日志,
缓存,
插件支持。
多数功能只是对HTTP协议中常用操作的封装,更多的功能需要插件或者整合其他模块来完成。
快速开发
安装Express
在项目目录下
npm install -g express-generator
express --help
建立工程
express -t ejs microblog 由于新版本没有-t命令
1.如何在项目中安装ejs模板引擎
在NodeJS指南中利用利用以下命令建立网站的基本结构:
express -t ejs microblog
运行这个命令后继续运行
cd microblog && npm install(安装项目的依赖属性),
发现安装的模板引擎是jade,而不是ejs。原因是现在的版本已经没有-t这个命令了,改为
express -e microblog
运行完这个命令,继续运行cd microblog && npm install,ejs模板引擎就安装好了
但是express3以上的版本把layout默认给取消了,所以现在在views文件夹下并没有生成layout.ejs。
2.安装了ejs后,如何使用ejs的layout模板
安装express-partials
在cmd中切换到项目目录,运行
(1)npm install express-partials或者
(2)在 package.json 里面的 dependencies 添加 "express-partials": "*"。然后在项目目录下运行 npm install 。
(3)然后在app.js 里面引用 express-partials,引用方法:
1.在path = require('path')后,添加引用 var partials = require('express-partials');
2.在 app.set('view engine', 'ejs')后,添加 app.use(partials());
3.增长端口,
app.listen(8100,function(){
console.log("Server Start!");
});
http://cnodejs.org/topic/515b009a6d38277306192e4e
启动服务器
http://localhost:8100
工程的结构
package.json
js文件: app.js, routes/index.js
模板引擎ejs也有2个文件index.ejs, layout.ejs
style.css
路由控制
工作原理
浏览器会向服务器发送请求,
app.js有一行app.get('/',routes.index),规定路径"/"的GET请求由routes.index函数处理。
最终视图模板生成HTML页面,返回给浏览器,
浏览器发现要获取style.css会再次向服务器发起请求,app.use()配置了静态文件服务器,找到文件,向客户端返回信息。
MVC架构,浏览器发起请求,由路由控制器接受,根据不同的路径定向到不同的控制器。
创建路由规则
app.get('/hello', routes.hello);
app.get是路由规则创建函数,接受2个参数,一个是请求的路径,一个是回调函数。
路径匹配
REST风格的路由规则
REST表征状态转移
GET app.get(path, callback);
POST app.post(path, callback);
PUT app.put(path, callback);
DELETE app.delete(path, callback);
控制权转移
同一路径绑定多个路由响应函数,
通过调用next(),会将路由控制权转移给后面的规则。
模板引擎
什么是模板引擎
是一个从页面模板根据一定的规则生成HTML的工具。
功能是将页面模板和要显示的数据结合起来生成HTML页面。目前的主流还是由服务器运行模板引擎。
使用模板引擎
推荐使用ejs
app.js中设置了模板引擎和页面模板的位置
app.set('views', __dirname + '/views');
app.set('view engine', 'ejs');
调用模板routes/index.js
res.render('index', {title:'Express'});
模板文件index.ejs
<h1><%= title %></h1>
<p>Welcome to <%= title %></p>
页面布局
layout.ejs
片段视图
partials接受2个参数,第一个是片段视图的名称,第二个是一个对象或一个数组。
<%- partial('listitem', items)%>
视图助手
允许在视图中访问一个全局的函数或对象,不用每次调用视图解析的时候单独传入。partial就是视图助手。
两类,静态(对象)和动态(函数,不接受参数,可以访问req res对象)。
建立微博网站
功能分析
路由规划
界面设计
使用Bootstrap
用户注册和登录
访问数据库
NoSQL非关系型数据库
MongoDB对象数据库,没有表行等概念,没有固定的模式和结构。
链接数据库
(
开启服务器
C:\Program Files\mongodb\bin
> mongod.exe -dbpath "E:\mongodbfiles"
打开浏览器输入:http://127.0.0.1:27017/
mongo.exe
use cnblogs
> db.users.insert({'name':'xumingxiang','sex':'man'})
在shell 命令窗口键入如下命令:
> show dbs // 显示所有数据库
>show collections // 显示当前数据库下的所有集合
>db.users.find() // 显示users集合下的所有数据文档
)
会话支持
注册和登入
注册页面
注册响应
用户模型
视图交互
登入和登出
页面权限控制
发表微博
使用nodejs进行WEB开发的更多相关文章
- Nodejs WEB开发常用库和框架
我在Nodejs的体系里也算泡了很久了,的确非常喜欢javascript和Nodejs. 在我看来,用nodejs做web开发有以下几个优点: Javascript作为一个语法异常简单的脚本语言,约束 ...
- web 开发自动化grunt
现在web开发自动化已很流行,如何进行压缩文件,如何进行测试js是否正确,如何进行 检测html文件是否规范等等都可以通过web自动化技术进行实现,只要打一个命令即可. 本文主要是通过grunt进行实 ...
- Meteor+AngularJS:超快速Web开发
为了更好地描述Meteor和AngularJS为什么值得一谈,我先从个人角度来回顾一下这三年来WEB开发的变化: 三年前,我已经开始尝试前后端分离,后端使用php的轻量业务逻辑框架.但 ...
- 2016 Web开发资源工具大搜罗
来源于:https://zhuanlan.zhihu.com/p/22730771 作者:余博伦链接:https://zhuanlan.zhihu.com/p/22730771来源:知乎著作权归作者所 ...
- Web开发技术发展历史
Web开发技术发展历史 来自:天码营 原文:http://www.tianmaying.com/tutorial/web-history Web的诞生 提到Web,不得不提一个词就是"互 ...
- 超全的web开发工具和资源
首页 新闻 产品 地图 动态 城市 帮助 论坛 关于 登录 注册 · 不忘初心,继续前进,环境云V2接口正式上线 · 环境云测点地图全新改版 · 祝福各位环境云用户中秋快乐! 平台信息 培训互动 ...
- Web开发的发展历史
了解一下Web开发相关的历史,相关技术的演进历程,知其前世今生,非常有助于加深Web开发相关技术的理解和认识. 下面是对网上几篇相关文章的总结和摘要: 1. Web开发的发展史 对过去的15年来,We ...
- 关于Web开发里并发、同步、异步以及事件驱动编程的相关技术
一.开篇语 我的上篇文章<关于如何提供Web服务端并发效率的异步编程技术>又成为了博客园里“编辑推荐”的文章,这是对我写博客很大的鼓励,也许是被推荐的原因很多童鞋在这篇文章里发表了评论,有 ...
- Spring+Maven+Dubbo+MyBatis+Linner+Handlebars—Web开发环境搭建
本文主要分三部分,分别是:后台核心业务逻辑.桥梁辅助控制和前台显示页面. 本Web开发环境综合了多种工具,包括Maven包管理与编译工具.Dubbo分布式服务框架.MyBatis数据持久化工具.Lin ...
随机推荐
- 免费企业ERP系统OA+ERP
AIO5基于B/S架构而研发,集成了OA(办公自动化).SCM(供应链管理).FM(财务管理)三大主力单元.支持手机APP. 协助中小型企业全面管理采购.销售业务, 规范仓库进出,处理与合作伙伴的往来 ...
- 关于Response.redirect和Response.End出现线程中止异常的处理
最近做了一个项目其中使用了多线程获取POST过来的数据后再Response回复,但由于是多线程,在Response.End()的时候报出了异常: 2013-10-20 10:05:31,606 res ...
- DOM基础(四)
每次写DOM的时候,就觉得好像没什么好写,因为涉及到知识点的方面的确不多,对于DOM来说,更多的还是练习为主.在练习的时候,最好能结合着js基础语法的知识点来学习.这样,在学习DOM的时候就不会那么枯 ...
- KoaHub.js可借助 Babel 编译稳定运行在 Node.js 环境上
koahubjs KoaHub.js -- 基于 Koa.js 平台的 Node.js web 快速开发框架.可以直接在项目里使用 ES6/7(Generator Function, Class, A ...
- SQL-with as基本用法(源码DEMO)
DROP TABLE #temp; with cr as ( SELECT At.SysNo AS AtSysNo , ( CASE WHEN At.Source = 1 THEN At.Vendor ...
- python + selenium <四>
层级定位 swich_to_alert swich_to_frame swich_to_window 1. driver.switch_to_alert().accept()#最简单,直接点击确定关闭 ...
- mysql新建数据库时的collation选择(转)
转自别处的文章.末尾附原文链接 mysql的collation大致的意思就是字符序.首先字符本来是不分大小的,那么对字符的>, = , < 操作就需要有个字符序的规则.collation做 ...
- VAO VBO IBO大乱炖
最近对程序中绘制卡顿的问题忍无可忍,终于决定下手处理了.程序涉及的绘制比较多,除了点.线.三角形.多边形.圆柱体之外,还有自组格式模型.开始想全部采用显示列表优化,毕竟效率最高,虽然显示列表存在编译之 ...
- reactjs Uncaught TypeError: Cannot read property 'location' of undefined
reactjs Uncaught TypeError: Cannot read property 'location' of undefined reactjs 路由配置 怎么跳转 不成功 国内搜索引 ...
- ECMA script 6的新特性
简单介绍下ES6的新特性: (1)箭头操作符 :简化了函数的书写 (2)类的支持:引入了class关键字,对象的创建,继承更加直观,父类方法的调用,实例化,构造函数等概念更加形象化. (3)增强的对象 ...