1. 安装
先说下如果需要用express 3.x版本,直接使用nmp 中的@字符确定版本,指令如下:
npm install -g express@3.5
如果需要使用4.0,这里有个需要注意的问题在4.x版本express 已经把命令行工具分离出来 (链接https://github.com/expressjs/generator)
我们现在全局安装只需要安装这个命令行工具就可以,指令如下:
npm install -g express-generator
2. 创建项目
$ express blog &&cd blog
blog是安装的文件夹名
$ npm install
安装express及依赖
$ npm start
这里需要注意 express 4.x 无法以 node app.js 为启动方式,而是用指令 npm start 作为启动
访问 http://localhost:3000/ 出现熟悉的Welcome to Express,证明安装成功。
这时我们就可以尝试4.0的新功能了。
3. 目录结构
- bin, 存放启动项目的脚本文件
- node_modules, 存放所有的项目依赖库。
- public,静态文件(css,js,img)
- routes,路由文件(MVC中的C,controller)
- views,页面文件(Ejs模板)
- package.json,项目依赖配置及开发者信息
- app.js,应用核心配置文件
4. package.json项目配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| { "name": "express4-demo", "version": "0.0.0", "private": true, "scripts": { "start": "node ./bin/www" }, "dependencies": { "body-parser": "~1.10.2", "cookie-parser": "~1.3.3", "debug": "~2.1.1", "ejs": "~2.2.3", "express": "~4.11.1", "morgan": "~1.5.1", "serve-favicon": "~2.2.0" } }
|
5. app.js核心文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
| var express = require('express'); var path = require('path'); var favicon = require('serve-favicon'); var logger = require('morgan'); var cookieParser = require('cookie-parser'); var bodyParser = require('body-parser'); var routes = require('./routes/index'); var app = express(); app.set('views', path.join(__dirname, 'views')); app.set('view engine', 'ejs'); app.use(favicon(__dirname + '/public/favicon.ico')); app.use(logger('dev')); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: false })); app.use(cookieParser()); app.use(express.static(path.join(__dirname, 'public'))); app.use('/', routes); app.use(function(req, res, next) { var err = new Error('Not Found'); err.status = 404; next(err); }); if (app.get('env') === 'development') { app.use(function(err, req, res, next) { res.status(err.status || 500); res.render('error', { message: err.message, error: err }); }); } app.use(function(err, req, res, next) { res.status(err.status || 500); res.render('error', { message: err.message, error: {} }); }); module.exports = app;
|
6. 路由功能
app.route方法会返回一个Route实例,它可以继续使用所有的HTTP方法,包括get,post,all,put,delete,head等。
1 2 3
| app.route('/users') .get(function(req, res, next) {}) .post(function(req, res, next) {})
|
express.Router类,则可以帮助我们更好的组织代码结构。在app.js文件中,定义了app.use(‘/’, routes); routes是指向了routes目录下的index.js文件,./routes/index.js文件中,express.Router被定义使用,路径/*处理都会由routes/index.js文件里的Router来处理。如果我们要管理不同的路径,那么可以直接配置为多个不同的Router。
1 2 3
| app.use('/user', require('./routes/user').user); app.use('/admin', require('./routes/admin').admin); app.use('/', require('./routes'));
|
7. 程序代码
1 2 3 4 5
| ~ git clone git@github.com:bsspirit/nodejs-demo.git # 下载github项目 ~ cd nodejs-demo # 进入下载目录 ~ git checkout express4 # 切换到express4的分支 ~ npm install # 下载依赖库 ~ npm start # 启动服务器
|