Node.js系列-express(上)
前言
Node.js系列的第一篇:http,大概描述了通过使用node.js内置的api创建一个服务并监听request实现简单的增删改查。现在,我们就通过通读express官网及使用express框架来进一步了解node.js。
Express
官网描述:基于 Node.js 平台,快速、开放、极简的 web 开发框架。
安装方式:
npm install express --save
特性:
1.Web应用:Express 是一个基于 Node.js 平台的极简、灵活的 web 应用开发框架,它提供一系列强大的特性,帮助你创建各种 Web 和移动设备应用。
从本质上来说,一个 Express 应用就是在调用各种中间件。
2.API:丰富的 HTTP 快捷方法和任意排列组合的 Connect 中间件,让你创建健壮、友好的 API 变得既快速又简单。
3.性能:Express 不对 Node.js 已有的特性进行二次抽象,我们只是在它之上扩展了 Web 应用所需的基本功能。
Hello World:监听3000端口起个服务
const express=require("express");
const app=express(); app.get('/',(req,res)=>{
res.end('Hello world!')
}); const server=app.listen(3000,()=>{
const host=server.address().address;
const port=server.address().port;
console.log(server.address());
console.log('Express app listening at http://%s:%s',host,port);
})
Express 应用生成器
安装express-generator
npm install express-generator -g
通过express-generator,并简单的创建实例并按照依赖包就可以帮我们快速地创建了一个应用骨架:
express cnpm install
.
├── app.js
├── bin
│ └── www
├── package.json
├── public
│ ├── images
│ ├── javascripts
│ └── stylesheets
│ └── style.css
├── routes
│ ├── index.js
│ └── users.js
└── views
├── error.jade
├── index.jade
└── layout.jade
通过分析应用的结构,我们就大概知道了,app.js是项目的入口文件,实现依赖包的引入、视图模板引擎的设置、路由的跳转和错误事件的处理;bin/www则是启动项的配置信息;而package.json就是我们安装的一些依赖包及命令行启动项目的设置;public则是前端放置的静态文件目录;routes和views则分别为路由跳转的方法和放置视图的模板。
路由
路由是指如何定义应用的端点(URIs)以及如何响应客户端的请求。
路由是由一个 URI、HTTP 请求(GET、POST等)和若干个句柄组成,它的结构如下: app.METHOD(path, [callback...], callback)
, app
是 express
对象的一个实例, METHOD
是一个 HTTP 请求方法, path
是服务器上的路径, callback
是当路由匹配时要执行的函数。
简单的路由示例:
app.get('/',(req,res)=>{
res.end('Hello world!')
});
简单理解app.use() 和 express.Router() 的区别
Router
实例是一个完整的中间件和路由系统,因此常称其为一个 “mini-app”。就像官网描述的Router常被称为“mini-app”,所以在使用app.method和express.Router上会存在很大的疑惑。
其实,我们可以简单的浏览下express-generator起的应用骨架可以了解到,app.use一般应用于全局的处理(例如全局中间件的引入等),而express.Router则偏向于具体业务逻辑的处理(其实个人觉得就是为了实现模块化的处理:正如官网描述可使用 express.Router
类创建模块化、可挂载的路由句柄)。
中间件
中间件(Middleware) 是一个函数,它可以访问请求对象(request object (req
)), 响应对象(response object (res
)), 和 web 应用中处于请求-响应循环流程中的中间件,一般被命名为 next
的变量。
中间件的功能包括:
- 执行任何代码。
- 修改请求和响应对象。
- 终结请求-响应循环。
- 调用堆栈中的下一个中间件。
如果当前中间件没有终结请求-响应循环,则必须调用 next()
方法将控制权交给下一个中间件,否则请求就会挂起。
模板引擎
express框架设置jade为默认模板引擎的代码:
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
就我个人而言,并不是要jade,而是返璞归真的使用的html。则我们需要做的处理是:注释上两条代码并引入ejs进行模板的调整
var ejs=require('ejs');
app.engine('html',ejs.renderFile);
app.set('view engine','html');
然后我们就可以在./views里面直接新建x.html了。
参考:http://www.expressjs.com.cn/4x/api.html#app.engine
进程管理
当在生产环境运行Express应用程序时,使用进程管理器是很有用的:
1.如果应用程序崩溃,会自动重新启动。
2.深入了解运行时性能和资源消耗。
3.动态修改设置以提高性能。
4.控制群集。
进程管理器有点像应用服务器:它是一个“容器”,用于为部署提供便利、提供高可用性并使您能够在运行时管理应用程序。
最受Express和其他node应用程序欢迎的进程管理有:
StrongLoop Process Manager
PM2
Forever
使用这三种工具中的任何一种都是非常有帮助的,不过,在一个统一的接口中,使用工具为整个Node应用程序的生命周期提供全面的运行时和部署解决方案的唯一解决方案是使用 StrongLoop 进程管理器工具来处理整个Node应用程序的生命周期。
下面简要介绍一下其中的每一种工具。关于详细比较,见http://strong-pm.io/compare/。
StrongLoop 进程管理器
StrongLoop 进程管理器是一个Node.js应用程序的生产过程管理器,具有内置的负载平衡、监视、多主机部署和图形控制台。它使你能够:
将节点应用程序构建、打包并部署到本地或远程系统。
查看CPU配置文件和堆快照,以优化性能并诊断内存泄漏。
保持进程和群集的激活。
查看应用程序的性能度量。
使用Nginx集成轻松地管理多主机部署。
将多个强循环PM统一到从ARC管理的分布式微服务运行时中。
您可以使用一个强大的CLI工具、slc或图形工具Arc来使用StrongLoop PM。它是开源的,并得到了StrongLoop的专业支持。
安装
npm install -g strongloop
基本用法
cd my-app slc start
查看进程管理器和所有已部署应用程序的状态:
slc ctl
列出所有管理下的应用程序(服务):
slc ctl ls
停止应用:
slc ctl stop my-app
重启应用:
slc ctl restart my-app
您还可以“软重启”,这让工作线程处理一个宽限期来关闭现有的连接,然后重新启动当前的应用程序:
slc ctl soft-restart my-app
从管理器中移除一个应用:
slc ctl remove my-app
PM2
PM2是带有内置负载均衡器的Node.js应用程序的生产进程管理器。它允许您永远保持应用程序的生存,在不停机的情况下重新加载它们,并将促进常见的系统管理任务。它还允许您管理应用程序日志、监视和集群。
更多:[https://github.com/Unitech/pm2]
安装
npm install pm2 -g
基本用法
使用pm2启动一个应用程序需要指定应用程序的路径。但是,停止、重新启动和删除只需要应用程序的名称或id。
pm2 start app.js
使用pm2启动一个应用程序将立即将其发送到后台。您可以使用各种pm2命令从命令行控制后台应用程序。
一旦用pm2启动一个应用程序,它就注册在pm2的带有ID的进程列表中,这样就可以使用它们的ID来管理系统上不同目录的同名应用程序。
注意,如果有多个具有相同名称的应用程序正在运行,那么pm2命令将影响所有应用程序。所以使用ID而不是名字来管理单个的应用程序。
进程列表:
pm2 list
停止一个应用:
pm2 stop 0
重启一个应用:
pm2 restart 0
展示更多关于应用的信息:
pm2 show 0
从pm2的注册表中删除应用程序:
pm2 delete 0
Forever
Forever 是一个简单的CLI工具,用于确保给定脚本连续运行(永远)。它简单的界面使它非常适合运行较小的Node应用程序和脚本部署。
更多:[https://github.com/foreverjs/forever]
安装
npm install forever -g
基本用法
要启动脚本,请使用“forever start”命令,并指定脚本的路径
forever start script.js
这将以守护模式(在后台)运行脚本。
要运行附加到终端的脚本,请省略“开始”。
forever script.js
使用日志选项-l、-o、-e记录 forever 输出和脚本是个好主意,如下例所示:
forever start -l forever.log -o out.log -e err.log script.js
进程列表:
forever list
要停止由 forever 停止命令启动的脚本,并指定进程索引(由“forever 列表”命令列出)
forever stop 1
或者,指定文件的路径:
forever stop script.js
停止所有由forever 启动的脚本:
forever stop all
总结
express(上)这篇博文主要是小弟根据express官网总结并添加一些自己在建项目时遇到的问题解决方案以及对express的粗了解,希望对想了解express的小伙伴提供一些帮助。
参考:http://www.expressjs.com.cn/
Node.js系列-express(上)的更多相关文章
- Node.js系列-express(下)
前言 距上次更新博客又两个月多了,这两个月内除了上班时间忙公司的项目外,下班后也没有闲着,做了点外包,有小程序的,管理端的项目.也可能那段时间做的外包项目也都比较急,所以晚上都搞到一点左右睡,严重的压 ...
- node.js使用express框架进行文件上传
关于node.js使用express框架进行文件上传,主要来自于最近对Settings-Sync插件做的研究.目前的研究算是取得的比较好的进展.Settings-Sync中通过快捷键上传文件,其实主要 ...
- 《唐三学node.js系列》—魂士篇&&三哥初始node.js
前言 如果你有一定的前端基础,比如 HTML.CSS.JavaScript.jQuery.那么Node.js 能让你以最低的成本快速过渡成为一个全栈工程师(我称这个全栈为伪全栈,我认为的全栈也要精通数 ...
- Code Your First API With Node.js and Express: Set Up the Server
How to Set Up an Express API Server in Node.js In the previous tutorial, we learned what the REST ar ...
- Node.js、express、mongodb 实现分页查询、条件搜索
前言 在上一篇Node.js.express.mongodb 入门(基于easyui datagrid增删改查) 的基础上实现了分页查询.带条件搜索. 实现效果 1.列表第一页. 2.列表第二页 3. ...
- Node.js、express、mongodb 入门(基于easyui datagrid增删改查)
前言 从在本机(win8.1)环境安装相关环境到做完这个demo大概不到两周时间,刚开始只是在本机安装环境并没有敲个Demo,从周末开始断断续续的想写一个,按照惯性思维就写一个增删改查吧,一方面是体验 ...
- node.js和express.js安装和使用步骤 [windows]
PS: NODEJS:https://nodejs.org NPM:https://www.npmjs.com/ 一.node.js安装与配置 到https://nodejs.org/en/downl ...
- node.js系列笔记之node.js初识《一》
node.js系列笔记之node.js初识<一> 一:环境说明 1.1 Linux系统CentOS 5.8 1.2 nodejs v0.10.15 1.3 nodejs源码下载地址 htt ...
- Node.js系列-http
前言: 最近一直忙着公司项目的事,战友们的留言也没空回复,博客也有段时间没有更新了,年底了就是一个的忙啊~~~(ps:同感的也给个赞吧) 现在前端的就是一直地更新一直有新的东西出来,什么ES2015, ...
随机推荐
- 如何迭代输出某文件夹下的所有文件的路径?(os.walk用法)
查看目录结构: tree 查看文件结构: os.walk 查看os.walk用法: help(os.walk) For each directory in the directory tree roo ...
- kafka Topic 与 Partition
Topic在逻辑上可以被认为是一个queue队列,每条消息都必须指定它的topic,可以简单理解为必须指明把这条消息放进哪个queue里.为 了使得Kafka的吞吐率可以水平扩展,物理上把topic分 ...
- Nginx+Tomcat实现负载均衡小demo
一.搭建Tomcat服务 下载安装JDK和Tomcat就不说了,太简单了.由于是win7单机环境测试,启动多个Tomcat服务可以通过在server.xml配置文件中修改端口实现.准备两个Tomcat ...
- msf
show exploit show payload msf使用数据库加快搜索,不然每次都等半天 service postgresql startmsfdb reinitmsf > db_rebu ...
- ceph -s集群报错too many PGs per OSD
背景 集群状态报错,如下: # ceph -s cluster 1d64ac80-21be-430e-98a8-b4d8aeb18560 health HEALTH_WARN <-- 报错的地方 ...
- Docker+Jenkins持续集成环境(2)使用docker+jenkins构建nodejs前端项目
前文使用Docker搭建Jenkins+Docker持续集成环境我们已经搭建了基于docker+jenkins的持续集成环境,并构建了基于maven的项目.这一节,我们继续扩展功能,增加对Nodejs ...
- zzuli oj 1135 算菜价
题目: Description 妈妈每天都要出去买菜,但是回来后,兜里的钱也懒得数一数,到底花了多少钱真是一笔糊涂帐.现在好了,作为好儿子(女儿)的你可以给她用程序算一下了,呵呵. Input 输入含 ...
- IntelliJ IDEA 2017.3下载与安装
大约在2017年暑假的时候知道了IntelliJ IDEA,但是那个时候一心认为有Eclipse就足够用了,然而今天在网上冲浪的时候发现,IntelliJ IDEA是java语言开发的集成环境,这款开 ...
- UE4 TSubclassOf VS Native Pointer
最近看到了TSubclassOf ,所以想要弄清楚跟一般指针的区别~ NativePointer VS UClass* VS TSubclassOf AActor* p ...
- 我的第一个python web开发框架(21)——小结
这个小网站终于成功上线,小白除了收获一笔不多的费用外,还得到女神小美的赞赏,心中满满的成就感.这一天下班后,他请老菜一起下馆子,兑现请吃饭的承诺,顺便让老菜点评一下. 小白:老大,在你的指导下终于完成 ...