概述:

做数据,免不了需要展示数据,数据可视化是必须经历的步骤。

本文将提供一个NodeJS的起步教程,是笔者这两天探索的小结。

正文: 

1. 为什么使用NodeJS

究竟是以B/S还是C/S的架构去展示数据呢?

我们是这么考虑的,由于我们做的软件会不断调整,需求也会不断调整,如果使用C/S的架构,缺乏一个良好的软件升级机制,那么每次版本更新将会是沉重的灾难。

我们之前已经尝过C/S架构的苦了。既然如此, 就使用B/S架构吧。

但是需要采用什么技术呢?

我们有一套爬虫工具,就是使用NodeJS + Chrome Extension,有些可以复用的模块,为了代码的统一性和完整性,于是我们决定使用NodeJS。

还贪图它对JSON支持的方便,我们的数据库是使用Mongodb,众所周知NodeJS和Mongo是好基友,那就这么办了!

至于服务器的性能,不是我们重点考虑的范畴,因为我们衡量过需求,一个数据展示工具,不可能有1w的并发,以我们现在的状况,有100的并发都是很高了。

而NodeJS支持100并发是绰绰有余啊,具体的性能指标不在本文讨论,网上有大量的文章进行探讨。

2. 为什么使用Express

主流,文档资料齐全,没必要重复造轮子,清晰,容易上手。

Express官网,英文站 http://expressjs.com/

Express官网,中文站 http://expressjs.jser.us/

3. Hello World 

(1) 安装全局express包

在命令行输入 $ npm install -g express

安装全局express包,使得我们可以像使用npm一样使用express,用来创建项目

(2) 创建项目,安装依赖

先看看如何使用express命令,去片

如果没有特殊的需求,直接 $ express ProjectName 即可,它会帮你选择最小的设置项,就是什么都没有,而模板引擎呢就使用NodeJS默认的Jade。

虽然网上有人说Jade干净方便,而且它是NodeJS官方的推荐,但我个人还是喜欢写HTML的方式去组织模板,于是就使用ejs。

去到你需要创建项目的目录中,

在命令行输入 $ express --session --ejs PR

由于在web项目中经常需要用到session,于是我添加--session的选项,最后的 PR(for Product Radar) 就是我的Project Name了。

它把整个目录树都输出来了,看着这个目录树也对整个项目的结构有个整体的把握了。

接下来看到它提示你 install dependencies ,非常人性化的提示,你下一步的操作命令都显示出来了。它怎么说,你怎么做就好了。

它会根据自动生成的package.json去安装相应的依赖,也就是express和ejs了。

至此,已经完成项目的创建,$ node app.js 即可运行项目

浏览器访问 http://localhost:3000 能看到Express的欢迎页面。

(3) 分析目录结构

/node_modules,不用多说了,就是该项目的依赖包放置的位置,有看前文内容的就不会对当中express和ejs产生疑惑了

/public,公共资源的存放位置,看到它的子目录也很明显了,/js,/css and /imgs

/routes,这个相当于是Controller ,负责对Http请求进行处理和响应,选择渲染某个页面,或者是一些逻辑处理,或者是返回计算结果等

/views,View层,由于我们使用的是ejs模板引擎 ,里面的index.ejs就相当于index.html这样了

app.js,这是一个实至名归的中央控制器,项目的配置,请求的分配都在这里

package.json,不用多说了,打开看看,一目了然

(4) Hello World, step by step 

A. 首先,我们看着index.ejs不爽,又或者我们会由前端工程师写好html页面,我们拷到项目当中来,能不能直接了当地使用*.html啊?当然可以!

在app.js中插入/修改以下代码:

1 var ejs = require('ejs');
2 app.engine('.html', ejs.__express);
3 app.set('view engine', 'html');

设定用ejs去解释.html为后缀的文件,关于app.engine的使用,请查看 http://expressjs.jser.us/api.html#app.engine

B. 登录模块

我们要限制home.html需要登录后才能访问,要有一个login.html登陆页,并需要有一个logout方法去处理登出的操作

首先,在app.js中添加路由控制:

 1 function authentication(req, res, next) {
 2     if (!req.session.user) {
 3         req.session.error = '请先登陆';
 4         return res.redirect('/login');
 5     }
 6     next();
 7 }
 8 function notAuthentication(req, res, next) {
 9     if (req.session.user) {
10         req.session.error = '已登陆';
11         return res.redirect('/');
12     }
13     next();
14 }
15 app.get('/', routes.index);
16 app.get('/users', user.list);
17 
18 app.all('/login', notAuthentication);
19 app.get('/login', routes.login);
20 app.post('/login', routes.doLogin);
21 
22 app.get('/logout', authentication);
23 app.get('/logout', routes.logout);
24 app.get('/home', authentication);
25 app.get('/home', routes.home);

在请求login、logout、home前都有一步拦截,如果是请求login,就判断你是否已经登出;如果是请求logout和home,就判断你是否已经登录。

注意,这些路由控制的步骤是有顺序的,在上面的会先执行,注意看到authentication两个函数,最后都有执行next(),意思是把路由控制权交给下一个路由控制器。

C. 修改routes/index.js

1 /*

 2  * GET login page.
 3  */
 4 exports.login = function(req, res) {
 5     res.render('login', { title: 'User Login' });
 6 };
 7 
 8 /*
 9  * POST login form.
10  */
11 exports.doLogin = function(req, res) {
12 
13     var user = {
14         username: 'admin',
15         password: 'admin'
16     };
17 
18     if( req.body.username === user.username && req.body.password === user.password ) {
19         req.session.user = user;
20         res.redirect('/home');
21     } else {
22         req.session.error = '用户名或密码不正确';
23         res.redirect('/login');
24     }
25 
26 };
27 
28 /*
29  * Do logout
30  */
31 exports.logout = function(req, res) {
32     req.session.user = null
33     res.redirect('/home');
34 };
35 
36 /*
37  * GET home page.
38  */
39 exports.home = function(req, res) {
40     res.render('home', { title: 'homepage',
41                           user: res.locals.user});
42 };

基本上就是设置跳转,渲染页面,已经session的判断及设置等,清晰明了。

D. 关于其中session的设置,请参考http://blog.fens.me/nodejs-express3/

参考文章:

NodeJS英文站,http://expressjs.com/

NodeJS中文站,http://expressjs.jser.us

Express GitHub,https://github.com/visionmedia/express

更详细的Hello World教程 http://blog.fens.me/nodejs-express3/

转载于:https://www.cnblogs.com/sysuys/p/3298888.html

[NodeJS] Hello World 起步教程相关推荐

  1. 开发 mirai QQ机器人起步教程

    前言 虽然该文最终是达到以python开发mirai机器人的目的,但起步教程,尤其是环境配置上仍然有大量的相同操作,对其他编程语言仍有借鉴之处 假设你已经安装好了 Java.Python等运行必须的环 ...

  2. IOS越狱开发起步教程

    IOS越狱开发起步教程 IOS,Jailbroken,Programming 周六, 一 14, 2012 学习并实战开发越狱后的IOS程序已经快两个月了,中文资料除了CocoaChina上有少数资料 ...

  3. wss2016 作文件服务器,Nodejs搭建wss服务器教程

    本文为大家分享了Nodejs搭建wss服务器的教程,供大家参考,具体内容如下 首先使用OpenSSL创建自签名证书: #生成私钥key文件 openssl genrsa 1024 > /path ...

  4. 为准大学生准备的C/C++编程起步教程

    最近越来越多的其它领域的大佬陆陆续续来找我 "垂询" 编程起步的方法了,攥写本文一是考虑到逐个回复所费时间甚多,二者是鄙人的脑子实在不是很好用总是会出现记漏东西或者表述不清的情况. ...

  5. NodeJS原生后台开发教程

    源码地址 my_node_server 参考资料 NodeJS服务端开发极速入门 概述 本例实现数学运算服务+静态资源读取服务: 操作数据库时我们使用Express/Koa框架: 后续教程敬请期待(比 ...

  6. Nodejs的express使用教程

    Express 是一个简洁.灵活的 node.js Web 应用开发框架, 它提供一系列强大的特性,帮助你创建各种 Web 和移动设备应用. 1.express组织结构 app demo |---no ...

  7. nodejs cluster_NodeJS 极简教程 lt;1gt; NodeJS 特点 amp; 使用场景

    1. NodeJS是什么 1.1 Node.js is a JavaScript runtime build on Chrome's V8. Node.js并不是一门语言,JavaScript才是.N ...

  8. 前端的小激动:Nodejs写简单接口教程

    Code is never die ! 写前端的朋友不知道如何拓展自己在后端的能力,那么nodejs是你的不二选择,废话不多说,直接进入正题. 这里我演示的是nodejs+mysql,别的数据库也类似 ...

  9. nodejs微信公众号教程

    教程 登录微信公众平台 开发 基本配置 服务器配置 主要是taken和服务器地址的配置 服务器端代码 var express = require('express');var crypto = req ...

最新文章

  1. UGUI的优点新UI系统三效率高效果好
  2. 在java中必须要有main吗_在一个Java应用程序中main方法必须被说明为_____。
  3. 24.二叉树中和为某一值的路径
  4. 使用C#开发ActiveX控件[Obsolete]
  5. .Net 垃圾回收和大对象处理
  6. 双机/RAC/Dataguard的区别【转】
  7. ASP.NET MVC 环境配置,从1.0到2.0的转换和学习资源等
  8. 《DSP using MATLAB》第6章开始了
  9. ShadeGraph教程之节点详解2:Channel Nodes
  10. 解决Python中文注释报错
  11. WPF 文字换行TextWrapping 显示不全用省略号TextTrimming 显示不全弹提示内容ToolTip
  12. c语言图像对比度增强,图像对比度增强实验分析报告.doc
  13. Diffusion Models扩散模型与深度学习(数学原理和代码解读)
  14. 注解(Annotation)那点事
  15. Davinci DM6446开发攻略——DSP开发工程建立
  16. 2022上半年软考成绩查询时间及查询方法
  17. 问题:当运行exe程序时遇到错误0000007时如何解决
  18. android graphview使用
  19. c++/c/java 资源共享群
  20. 【转帖】Moodle平台的5个新玩法

热门文章

  1. xml文件、jsp文件、sql文件、shell脚本文件注释
  2. 写篇技术博客被简书锁定是一种什么样的体验
  3. GDAL源码剖析(三)之Swig编译和帮助文档生成
  4. 浅析 golang module
  5. 百万 Go TCP 连接的思考: epoll方式减少资源占用
  6. Centos下安装minikube
  7. C#调用VC的DLL的接口函数参数类型转换一览表
  8. 计算机表格中需要乘法求和,《怎么在Excel表格里面使用乘法求和》
  9. iphone各机型参数对比_现在买哪一款iPhone更“香”?
  10. qt_3_Qt开发环境