作者: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. PHP二分查找(递归和循环)

    二分查找可以通过递归和循环来实现, 思路如下: 将要查找的数和中间数进行比较, 如果相等,则表示找到,返回下标 如果要查找的数小于中间这个数,则说明要查找的数分布在数组左边,修改right边界,使其等 ...

  2. Mysql 分别按月, 日为组group,进行统计排序order

    在数据库中我们经经常使用sql语句对表进行简单的统计排序,对于日期字段.我们能够简单的对其进行order. 对于复杂一点的能够按日期中的年.月,日分别进行group,order. 按年份进行group ...

  3. C++ Primer笔记1_转义字符_标准库类型string_标准库类型vector

    1.转义字符 一般有两种方式: \x后紧跟1个或多个十六进制数字.或\后紧跟1.2.3个八进制数字,当中数字部分是字符相应的数值. #include <iostream> using na ...

  4. JAVA wait(), notify(),sleep具体解释

    在CSDN开了博客后,一直也没在上面公布过文章,直到前一段时间与一位前辈的对话,才发现技术博客的重要,立志要把CSDN的博客建好.但一直没有找到好的开篇的主题,今天再看JAVA线程相互排斥.同步的时候 ...

  5. [HeadFirst-JSPServlet学习笔记][第三章:实战MVC]

    第三章 实战MVC J2EE如何集成一切 Java2企业版(Java 2 Enterprise Editon,J2EE)是一种超级规范.规定了servlets2.4,JSP2.0,EJB2.1(Ent ...

  6. C# 文件操作(一)

    1.说明: 写入文件内容,如果文件中有内容,则进行追加,目录是程序集下的目录 public static void WriteLog(string value) { try { //目录是程序集下的D ...

  7. UVa1592 数据库(摘)

    输入一个n行m列的数据库(1<=n<=10000,1<=m<=10),是否存在两个不同行r1,r2和两个不同列c1,c2,使得这两行和这两行相同(即(r1,c1)和(r2,c1 ...

  8. vim常用指令一览

    插入指令 i 在光标处插入字符 I 在光标所在行最前插入 a 在光标所在字符后面插入 A 在光标所在行的最后插入 o 在光表所在行下面插入一行 O 在光标所在行上面插入一行 r 替换光标所在字符,只替 ...

  9. Spring HibernateTemplate的使用

    Spring HibernateTemplate的使用 2008-03-25 11:38 2020人阅读 评论(0) 收藏 举报 springbeanhibernatesessiondaoclass ...

  10. [Head First Python]3. 文件与异常:处理错误

    datafile.txt Man: Is this the right room for an argument? Other Man: I've told you once. Man: No you ...