作者:zhanhailiang 日期:2014-11-09

本文将介绍怎样使用express-generator工具高速生成基于express框架的应用程序骨架:

1. 安装express-generator工具:

[root@~/wade/wadetest]# npm install express-generator -g
/usr/bin/express -> /usr/lib/node_modules/express-generator/bin/express
express-generator@4.9.0 /usr/lib/node_modules/express-generator
├── commander@1.3.2 (keypress@0.1.0)
└── mkdirp@0.5.0 (minimist@0.0.8)

2. 在github.com上创建空项目express-generator,并将其克隆到本地:

[root@~/wade/nodejs]# git clone git@github.com:billfeller/express-generator.git
Initialized empty Git repository in /root/wade/nodejs/express-generator/.git/
remote: Counting objects: 3, done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (3/3), done.

3. 使用express-generator工具强制创建名为express-generator的应用程序:

[root@~/wade/nodejs]# express -h
 
Usage: express [options] [dir]
 
Options:
 
-h, --help output usage information
-V, --version output the version number
-e, --ejs add ejs engine support (defaults to jade)
--hbs add handlebars engine support
-H, --hogan add hogan.js engine support
-c, --css <engine> add stylesheet <engine> support (less|stylus|compass) (defaults to plain css)
-f, --force force on non-empty directory
 
[root@~/wade/nodejs]# express -f express-generator
 
create : express-generator
create : express-generator/package.json
create : express-generator/app.js
create : express-generator/public
create : express-generator/public/javascripts
create : express-generator/public/images
create : express-generator/public/stylesheets
create : express-generator/public/stylesheets/style.css
create : express-generator/routes
create : express-generator/routes/index.js
create : express-generator/routes/users.js
create : express-generator/views
create : express-generator/views/index.jade
create : express-generator/views/layout.jade
create : express-generator/views/error.jade
create : express-generator/bin
create : express-generator/bin/www
 
install dependencies:
$ cd express-generator && npm install
 
run the app:
$ DEBUG=express-generator ./bin/www
 
[root@~/wade/nodejs]# cd express-generator/
[root@~/wade/nodejs/express-generator]# npm install
cookie-parser@1.3.3 node_modules/cookie-parser
├── cookie@0.1.2
└── cookie-signature@1.0.5
 
debug@2.0.0 node_modules/debug
└── ms@0.6.2
 
serve-favicon@2.1.6 node_modules/serve-favicon
├── ms@0.6.2
├── fresh@0.2.4
└── etag@1.5.0 (crc@3.0.0)
 
morgan@1.3.2 node_modules/morgan
├── basic-auth@1.0.0
├── depd@0.4.5
└── on-finished@2.1.0 (ee-first@1.0.5)
 
body-parser@1.8.4 node_modules/body-parser
├── media-typer@0.3.0
├── bytes@1.0.0
├── raw-body@1.3.0
├── depd@0.4.5
├── qs@2.2.4
├── iconv-lite@0.4.4
├── on-finished@2.1.0 (ee-first@1.0.5)
└── type-is@1.5.2 (mime-types@2.0.2)
 
express@4.9.8 node_modules/express
├── merge-descriptors@0.0.2
├── utils-merge@1.0.0
├── fresh@0.2.4
├── cookie@0.1.2
├── escape-html@1.0.1
├── range-parser@1.0.2
├── cookie-signature@1.0.5
├── finalhandler@0.2.0
├── vary@1.0.0
├── media-typer@0.3.0
├── methods@1.1.0
├── parseurl@1.3.0
├── serve-static@1.6.4
├── path-to-regexp@0.1.3
├── depd@0.4.5
├── on-finished@2.1.1 (ee-first@1.1.0)
├── qs@2.2.4
├── etag@1.4.0 (crc@3.0.0)
├── type-is@1.5.2 (mime-types@2.0.2)
├── proxy-addr@1.0.3 (forwarded@0.1.0, ipaddr.js@0.1.3)
├── send@0.9.3 (destroy@1.0.3, ms@0.6.2, on-finished@2.1.0, mime@1.2.11)
└── accepts@1.1.2 (negotiator@0.4.9, mime-types@2.0.2)
 
jade@1.6.0 node_modules/jade
├── character-parser@1.2.0
├── commander@2.1.0
├── void-elements@1.0.0
├── mkdirp@0.5.0 (minimist@0.0.8)
├── transformers@2.1.0 (promise@2.0.0, uglify-js@2.2.5, css@1.0.8)
├── monocle@1.1.51 (readdirp@0.2.5)
├── constantinople@2.0.1 (uglify-js@2.4.15)
└── with@3.0.1 (uglify-js@2.4.15)

4. 最后以调试模式执行该应用程序:

[root@~/wade/nodejs/express-generator]# DEBUG=express-generator ./bin/www
express-generator Express server listening on port 3000 +0ms
GET /users 200 15.039 ms - 23
GET /favicon.ico 404 461.432 ms - 1212
GET / 304 24.634 ms - -
GET /stylesheets/style.css 304 3.490 ms - -

也能够通过设置DEBUG=express:*打印并查看全部express内部调用日志:

[root@~/wade/nodejs/express-generator]# DEBUG=express:* ./bin/www
express:router:route new / +0ms
express:router:layer new / +7ms
express:router:route get / +2ms
express:router:layer new / +0ms
express:router:route new / +1ms
express:router:layer new / +0ms
express:router:route get / +0ms
express:router:layer new / +0ms
express:application compile etag weak +1ms
express:application compile query parser extended +0ms
express:application compile trust proxy false +0ms
express:application booting in development mode +1ms
express:router use / query +1ms
express:router:layer new / +0ms
express:router use / expressInit +0ms
express:router:layer new / +0ms
express:router use / logger +1ms
express:router:layer new / +0ms
express:router use / jsonParser +43ms
express:router:layer new / +0ms
express:router use / urlencodedParser +3ms
express:router:layer new / +0ms
express:router use / cookieParser +1ms
express:router:layer new / +0ms
express:router use / serveStatic +0ms
express:router:layer new / +0ms
express:router use / router +1ms
express:router:layer new / +0ms
express:router use /users router +0ms
express:router:layer new /users +0ms
express:router use / <anonymous> +0ms
express:router:layer new / +0ms
express:router use / <anonymous> +0ms
express:router:layer new / +0ms
express:router use / <anonymous> +0ms
express:router:layer new / +0ms
express:router dispatching GET / +9s
express:router query : / +2ms
express:router expressInit : / +1ms
express:router logger : / +0ms
express:router jsonParser : / +2ms
express:router urlencodedParser : / +0ms
express:router cookieParser : / +1ms
express:router serveStatic : / +0ms
express:router router : / +3ms
express:router dispatching GET / +0ms
GET / 304 475.460 ms - -
express:router dispatching GET /stylesheets/style.css +570ms
express:router query : /stylesheets/style.css +1ms
express:router expressInit : /stylesheets/style.css +0ms
express:router logger : /stylesheets/style.css +0ms
express:router jsonParser : /stylesheets/style.css +1ms
express:router urlencodedParser : /stylesheets/style.css +0ms
express:router cookieParser : /stylesheets/style.css +0ms
express:router serveStatic : /stylesheets/style.css +1ms
GET /stylesheets/style.css 304 6.142 ms - -

另外,express应用程序生成器提供了默认的应用程序启动命令,请见package.json中scripts定义:

{
"name": "express-generator",
"version": "0.0.0",
"private": true,
"scripts": {
"start": "node ./bin/www"
}
,
"dependencies": {
"express": "~4.9.0",
"body-parser": "~1.8.1",
"cookie-parser": "~1.3.3",
"morgan": "~1.3.0",
"serve-favicon": "~2.1.3",
"debug": "~2.0.0",
"jade": "~1.6.0"
}
}

这意味着你能够直接使用npm start启动该应用程序,例如以下:

[root@~/wade/nodejs/express-generator]# DEBUG=express:* npm start
 
> express-generator@0.0.0 start /root/wade/nodejs/express-generator
> node ./bin/www

默认应用程序中包括两种路由策略/,/users。详情请见代码。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYmlsbGZlbGxlcg==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

5. express应用程序文件夹结构分析:

[root@~/wade/nodejs/express-generator]# ll
total 48
drwxr-xr-x 8 root root 4096 Nov 9 16:57 .
drwxr-xr-x 4 root root 4096 Nov 9 16:30 ..
-rw-r--r-- 1 root root 1478 Nov 9 16:31 app.js // 统一应用程序入口
drwxr-xr-x 2 root root 4096 Nov 9 16:56 bin // 应用程序启动脚本
drwxr-xr-x 8 root root 4096 Nov 9 16:59 .git
-rw-r--r-- 1 root root 13 Nov 9 16:32 .gitignore
drwxr-xr-x 10 root root 4096 Nov 9 16:33 node_modules // npm install
-rw-r--r-- 1 root root 333 Nov 9 16:31 package.json // node应用程序包配置
drwxr-xr-x 5 root root 4096 Nov 9 16:31 public // 公共资源
-rw-r--r-- 1 root root 36 Nov 9 16:31 README.md
drwxr-xr-x 2 root root 4096 Nov 9 16:58 routes // 控制器模块C
drwxr-xr-x 2 root root 4096 Nov 9 16:31 views // 视图模块V

由上可见,事实上express应用程序也是典型的MVC应用程序,对于不熟悉MVC分层设计模式的同学请自行Google,在此就不一一展开讨论。

6. 推荐阅读:

基于express框架的应用程序骨架生成器介绍的更多相关文章

  1. 【Node.js】一、搭建基于Express框架运行环境+更换HTML视图引擎

      1)安装express generator生成器 这个express generator生成器类似于vue-cli脚手架工具,用来创建一个后端项目,首先我们要对生成器进行全局安装,在cmd中输入下 ...

  2. 基于express框架的留言板实现步骤

    这个留言板是基于express框架,和ejs模板引擎,首先需要在根目录安装express框架,然后安装ejs模块和body-parser(获取用户表单提交的数据):建立项目目录 message,然后依 ...

  3. Node.js基于Express框架搭建一个简单的注册登录Web功能

    这个小应用使用到了node.js  bootstrap  express  以及数据库的操作 :使用mongoose对象模型来操作 mongodb 如果没了解过的可以先去基本了解一下相关概念~ 首先注 ...

  4. 搭建基于Express框架运行环境

    安装express generator生成器 通过生成器自动创建项目 配置分析 一.安装 cnpm i -g express-generator express --version // 查看版本 e ...

  5. NODE 基于express 框架和mongoDB的cookie和session认证 和图片的上传和删除

    源码地址 https://gitee.com/zyqwasd/mongdbSession 本项目的mongodb是本地的mongodb 开启方法可以百度一下 端口是默认的27017 页面效果 1. 注 ...

  6. 【Node.js】二、基于Express框架 + 连接MongoDB + 写后端接口

    在上节,我们讲了如何搭建express环境,现在我们说说如何通过node.js写服务接口给前端调用 1. 首先通过MongoDB建好数据库与表格 例如,我的数据库名字为db_demo,数据库表格为go ...

  7. 基于express框架的Token实现方案

    什么是Token? 在计算机身份认证中是令牌(临时)的意思,在词法分析中是标记的意思.一般我们所说的的token大多是指用于身份验证的token Token的特点 随机性 不可预测性 时效性 无状态. ...

  8. 基于 mpvue 框架的小程序选择控件,支持单列,多列,联动

    最近在学着写mpvue小程序,在做选择控件时候遇到了点问题,按照微信小程序方法picker,很不方便! 在网上搜到一个很好用的组件下面给大家分享: 组件说明文档链接:https://go.ctolib ...

  9. 解决前端向后端请求静态资源的问题(基于express框架)

    请求js,css,image资源: 前端 <script src='后端url/assets/js/xxx.js'>,<link href='后端url/assets/css/xxx ...

随机推荐

  1. jquery常用方法以及详解

    $("p").addClass(css中定义的样式类型); 给某个元素添加样式 $("img").attr({src:"test.jpg", ...

  2. Linux下使用JNI的常见问题及解决方案

    JNI是java和C/C++混合编程的接口,可以很方便地实现java调用C/C++语言.具体的使用方法,网上有很多教程,在此不做过多介绍.本博客只关注在使用JNI的过程中的常见问题. 1.     生 ...

  3. [POJ 3734] Blocks (矩阵高速幂、组合数学)

    Blocks Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 3997   Accepted: 1775 Descriptio ...

  4. 【DataStructure】Description and usage of queue

    [Description] A queue is a collection that implements the first-in-first-out protocal. This means th ...

  5. unity4.x for mac破解(含Unity全版本号破解)

    声明,破解方式及工具,均来源于国外互联网.仅供交流学习使用! 国外一个大仙做的破解.这位大侠实在是牛,全版本号跟进,win和mac的破解包都有.win下有类似于注冊机的Patch,mac下有crack ...

  6. apache访问控制设置

    apache访问控制设置 (2009-03-17 11:24:36) 转载▼ 标签: it 杂谈   Order allow,deny    默认情况下禁止所有客户机访问 Order deny,all ...

  7. python-整理--时间模块

    使用datetime模块处理时间 ########################################################################### # # dat ...

  8. HDU ACM 题目分类

    模拟题, 枚举1002 1004 1013 1015 1017 1020 1022 1029 1031 1033 1034 1035 1036 1037 1039 1042 1047 1048 104 ...

  9. Reactor模型

    Reactor模型 原文地址:http://www.ivaneye.com/2016/07/23/iomodel.html 无处不在的C/S架构 在这个充斥着云的时代,我们使用的软件可以说99%都是C ...

  10. JS编码解码详解

    今天在整理 js编码解码方法时,在网上搜资料,发现一篇文章讲的不错,讲解的非常简单明了,于是乎就想转载过来,却发现无法转载到博客园,最后只能卑鄙的摘抄过来.js编码解码就是将一些对URL和数据库敏感的 ...