[NodeJS] Hello World 起步教程
概述:
做数据,免不了需要展示数据,数据可视化是必须经历的步骤。
本文将提供一个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中插入/修改以下代码:
var ejs = require('ejs');
app.engine('.html', ejs.__express);
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中添加路由控制:
req.session.error = '已登陆';
}
next();
}
app.get('/', routes.index);
app.get('/users', user.list);
app.all('/login', notAuthentication);
app.get('/login', routes.login);
app.post('/login', routes.doLogin);
app.get('/logout', authentication);
app.get('/logout', routes.logout);
app.get('/home', authentication);
app.get('/home', routes.home);
在请求login、logout、home前都有一步拦截,如果是请求login,就判断你是否已经登出;如果是请求logout和home,就判断你是否已经登录。
注意,这些路由控制的步骤是有顺序的,在上面的会先执行,注意看到authentication两个函数,最后都有执行next(),意思是把路由控制权交给下一个路由控制器。
C. 修改routes/index.js
1 /*
exports.doLogin =
username: 'admin',
password: 'admin'
};
req.session.user = user;
res.redirect('/home');
} req.session.error = '用户名或密码不正确';
res.redirect('/login');
}
};
exports.logout = req.session.user = res.redirect('/home');
};
exports.home = res.render('home', { title: 'homepage',
user: res.locals.user});
};
基本上就是设置跳转,渲染页面,已经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/
[NodeJS] Hello World 起步教程的更多相关文章
- nodejs零基础详细教程1:安装+基础概念
第一章 建议学习时间2小时 课程共10章 学习方式:详细阅读,并手动实现相关代码 学习目标:此教程将教会大家 安装Node.搭建服务器.express.mysql.mongodb.编写后台业务逻辑. ...
- nodejs搭建web服务教程
nodejs搭建web服务教程 先安装nodejs 然后 命令node js文件 即可开启服务了 输出如下 Magic happens on port 9011 你查看端口可以看到tcp 0 0 :: ...
- Python+mirai开发QQ机器人起步教程(2021.9.9测试有效)
参考:开发 mirai QQ机器人起步教程_叹之-CSDN博客_mirai python 本篇文章参考了以上博客,并对其中的失效内容和版本匹配问题进行了补充修改,实测能够成功运行.部分步骤的运行截图见 ...
- nodejs零基础详细教程2:模块化、fs文件操作模块、http创建服务模块
第二章 建议学习时间4小时 课程共10章 学习方式:详细阅读,并手动实现相关代码 学习目标:此教程将教会大家 安装Node.搭建服务器.express.mysql.mongodb.编写后台业务逻辑 ...
- nodejs pm2配置使用教程
pm2是非常优秀工具,它提供对基于node.js的项目运行托管服务.它基于命令行界面,提供很多特性: 内置的负载均衡器等等,下面我们就一起来看看吧. 一.简介 pm2是一个带有负载均衡功能的应用进程管 ...
- window nodejs 版本管理器 nvm-windows 教程
先去https://github.com/coreybutler/nvm-windows/releases 下载nvm-setup.zip 安装 安装的过程中会提示是否获取nodejs的管理权限,点确 ...
- mysql数据库史上最详细起步教程(1)
本文主要讲解mysql的操作,尽量保证步骤的详细与清晰,希望能帮到大家. 1.登录后进行数据库的创建:create database lf(数据库名); (一定要记住分号,mysql在语句的结束符就 ...
- nodejs【伪】入门教程
声明: 本文适合白的不能再白的小白 不要被标题误导,本文不会讲nodejs基础,只是本人学习流程和资料的一个整合 如果想找一大堆教程自己看,没有电梯,自己拉到文章最下方吧 一.nodejs是什么 ...
- 这可能是你看过最详细的NodeJS安装配置教程
博主是一枚Java菜鸡,今天在B站上看一些教程视频的时候偶尔看了一眼评论区,发现好多人在Node和Vue安装的位置卡住了,便决定今晚肝出一套最详细的NodeJS安装配置的教程 本文适合初次接触Node ...
随机推荐
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
- Centos 下 mysql root 密码重置
重置mysql密码的方法有很多,官网也提供了很方便的快捷操作办法,可参考资料 resetting permissions .本文重置密码的具体步骤如下: 一.停止MySQL(如果处于运行状态) #se ...
- 在ubuntu16.10 PHP测试连接MySQL中出现Call to undefined function: mysql_connect()
1.问题: 测试php7.0 链接mysql数据库的时候发生错误: Fatal error: Uncaught Error: Call to undefined function mysqli_con ...
- JavaScript动画-碰撞检测
▓▓▓▓▓▓ 大致介绍 碰撞检测是指在页面中有多个元素时,拖拽一个元素会出现碰撞问题,碰撞检测是以模拟拖拽和磁性吸附中的范围限定为基础的 效果:碰撞检测 ▓▓▓▓▓▓ 碰撞检测 先来看看碰撞检测的原理 ...
- ShenNiu.MVC管理系统
本篇将要和大家分享的是一个简单的后台管理系统,这里先发个地址http://www.lovexins.com:8081/(登陆账号:youke,密码:123123:高级用户账号:gaoji,密码:123 ...
- UWP开发之Mvvmlight实践九:基于MVVM的项目架构分享
在前几章介绍了不少MVVM以及Mvvmlight实例,那实际企业开发中将以那种架构开发比较好?怎样分层开发才能节省成本? 本文特别分享实际企业项目开发中使用过的项目架构,欢迎参照使用!有不好的地方欢迎 ...
- angular 源码分析 1 - angularInit()
angularjs 是个神奇的框架,由于我的好奇,想了解她的内部工作原理,只能一步一步的走进她,靠近她,和她深入的交流. angularjs 的入口是什么样子的呢?一起掀起她的盖头吧. 在这里我只讲方 ...
- UWP简单示例(三):快速开发2D游戏引擎
准备 IDE:VisualStudio 2015 Language:VB.NET/C# 图形API:Win2D MSDN教程:UWP游戏开发 游戏开发涉及哪些技术? 游戏开发是一门复杂的艺术,编码方面 ...
- .NET面试题集锦①(Part一)
一.前言部分 文中的问题及答案多收集整理自网络,不保证100%准确,还望斟酌采纳. 1.面向对象的思想主要包括什么? 答:任何事物都可以理解为对象,其主要特征: 继承.封装.多态.特点:代码好维护,安 ...
- Android Weekly Notes Issue #235
Android Weekly Issue #235 December 11th, 2016 Android Weekly Issue #235 本期内容包括: 开发一个自定义View并发布为开源库的完 ...