这里,准备从零开始用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开发的更多相关文章

  1. Nodejs WEB开发常用库和框架

    我在Nodejs的体系里也算泡了很久了,的确非常喜欢javascript和Nodejs. 在我看来,用nodejs做web开发有以下几个优点: Javascript作为一个语法异常简单的脚本语言,约束 ...

  2. web 开发自动化grunt

    现在web开发自动化已很流行,如何进行压缩文件,如何进行测试js是否正确,如何进行 检测html文件是否规范等等都可以通过web自动化技术进行实现,只要打一个命令即可. 本文主要是通过grunt进行实 ...

  3. Meteor+AngularJS:超快速Web开发

        为了更好地描述Meteor和AngularJS为什么值得一谈,我先从个人角度来回顾一下这三年来WEB开发的变化:     三年前,我已经开始尝试前后端分离,后端使用php的轻量业务逻辑框架.但 ...

  4. 2016 Web开发资源工具大搜罗

    来源于:https://zhuanlan.zhihu.com/p/22730771 作者:余博伦链接:https://zhuanlan.zhihu.com/p/22730771来源:知乎著作权归作者所 ...

  5. Web开发技术发展历史

    Web开发技术发展历史   来自:天码营 原文:http://www.tianmaying.com/tutorial/web-history Web的诞生 提到Web,不得不提一个词就是"互 ...

  6. 超全的web开发工具和资源

    首页 新闻 产品 地图 动态 城市 帮助 论坛 关于 登录 注册 · 不忘初心,继续前进,环境云V2接口正式上线 · 环境云测点地图全新改版 · 祝福各位环境云用户中秋快乐!   平台信息 培训互动 ...

  7. Web开发的发展历史

    了解一下Web开发相关的历史,相关技术的演进历程,知其前世今生,非常有助于加深Web开发相关技术的理解和认识. 下面是对网上几篇相关文章的总结和摘要: 1. Web开发的发展史 对过去的15年来,We ...

  8. 关于Web开发里并发、同步、异步以及事件驱动编程的相关技术

    一.开篇语 我的上篇文章<关于如何提供Web服务端并发效率的异步编程技术>又成为了博客园里“编辑推荐”的文章,这是对我写博客很大的鼓励,也许是被推荐的原因很多童鞋在这篇文章里发表了评论,有 ...

  9. Spring+Maven+Dubbo+MyBatis+Linner+Handlebars—Web开发环境搭建

    本文主要分三部分,分别是:后台核心业务逻辑.桥梁辅助控制和前台显示页面. 本Web开发环境综合了多种工具,包括Maven包管理与编译工具.Dubbo分布式服务框架.MyBatis数据持久化工具.Lin ...

随机推荐

  1. Web平台安装及检测程序

    软件名称:microsoft web platform installer 上图: 可以看做是一个App Store, 你再也不用东奔西跑去找什么开发软件,CMS等等了,直接打开这个,勾选上就安装吧, ...

  2. .NET 三层架构

    三层架构简介: 三层架构(3-tier architecture) 通常意义上的三层架构就是将整个业务应用划分为:界面层(User Interface layer).业务逻辑层(Business Lo ...

  3. JAVA面试题和答案(二)

    本文我们将要讨论Java面试中的各种不同类型的面试题,它们可以让雇主测试应聘者的Java和通用的面向对象编程的能力.下面的章节分为上下两篇,第一篇将要讨论面向对象编程和它的特点,关于Java和它的功能 ...

  4. Apache Flume日志收集系统简介

    Apache Flume是一个分布式.可靠.可用的系统,用于从大量不同的源有效地收集.聚合.移动大量日志数据进行集中式数据存储. Flume简介 Flume的核心是Agent,Agent中包含Sour ...

  5. sass 与 less 的区别与学习

    一直使用的都是sass,公司提出新需求要用less,看了一下less的官方文档,感觉记不住.在这我想用与sass的比较学习,加深印象.也希望可以帮助到一些人. 一.安装sass与less sass基于 ...

  6. ng-class 用法

    很长时间不写页面很多angualrjs的指令用法忘了,搜搜网上的千篇一律“不全”: 下面我把ngclass的用法列出来!(注:网上只有2种,我补充一种三维运算) 1:   ng-class=" ...

  7. java学习(一)静态代码块 构造代码块 构造方法的执行顺序及注意问题

    今天我总结了一下java中静态代码块 构造代码块 构造方法的执行顺序及其注意问题 首先要知道静态代码块是随着类的加载而加载,而构造代码块和构造方法都是随着对象的创建而加载 当时做了这么一个小案例(想必 ...

  8. jsp中的动作标签

    和html标签一样,使用尖括号'<>'包裹起来. 用于在jsp页面中处理业务逻辑,避免在jsp中过多的使用java脚本. <jsp:forward>用于请求转发,它与Reque ...

  9. 关于binary log那些事——认真码了好长一篇

    本文介绍binlog的作用以及几个重要参数的使用方法,同时通过实验来描述binlog内部记录内容:row .statement跟mixed的设置下,记录了哪些东西,最后会简单介绍下binlog ser ...

  10. PRINCE2重要性--光环国际培训

    项目的重要性 答:对于当今的组织来说,一个关键的挑战,就是能够成功地平衡以下两个并存的.互相竞争的方面:保持现有的商业运营--盈利能力.服务质量.客户关系.品牌忠实度.生产效率.市场信心等,这些被称为 ...