Node.js开发Web后台服务(四)之Express框架

五、Express

5.1、Express框架核心特性

Express 是一个简洁而灵活的 node.js Web应用框架, 提供了一系列强大特性帮助你创建各种 Web 应用,和丰富的 HTTP 工具。
使用 Express 可以快速地搭建一个完整功能的网站。使用Node.js作为AngularJS开发Web服务器的最佳方式是使用Express模块。

Express官网: http://expressjs.com/

Express4.x API:http://expressjs.com/zh-cn/4x/api.html

image.png

5.2、Express框架核心特性

可以设置中间件来响应 HTTP 请求。

定义了路由表用于执行不同的 HTTP 请求动作。

可以通过向模板传递参数来动态渲染 HTML 页面。

丰富的 HTTP 快捷方法和任意排列组合的 Connect 中间件,让你创建健壮、友好的 API 变得既快速又简单。

Express 不对 Node.js 已有的特性进行二次抽象,我们只是在它之上扩展了 Web 应用所需的基本功能。

5.3、安装 Express

安装 Express 并将其保存到依赖列表中:

npm install express --save

以上命令全局安装express。也可安装时指定安装中间件。

body-parser - node.js 中间件,用于处理 JSON, Raw, Text 和 URL 编码的数据。

cookie-parser - 这就是一个解析Cookie的工具。通过req.cookies可以取到传过来的cookie,并把它们转成对象。

multer - node.js 中间件,用于处理 enctype="multipart/form-data"(设置表单的MIME编码)的表单数据。

$ npm install body-parser --save
$ npm install cookie-parser --save
$ npm install multer --save

默认这些模块都已经添加。

image.png

5.4、第一个Express框架实例

接下来我们使用 Express 框架来输出 "Hello World"。
以下实例中我们引入了 express 模块,并在客户端发起请求后,响应 "Hello World" 字符串。

创建一个目录,如Project,进入命令行:

使用npm install express 导入express模块。

在目录下创建hello.js文件,如下所示:

//引入express模块
var express = require('express');
//创建一个app对象,类似一个web 应用(网站)
var app = express();
//接受指定路径的请求,指定回调函数
app.get('/', function (req, res){
    res.send('Hello World');
});
//创建一个web服务器,可以认为就是web服务器对象
//监听8081端口,当监听成功时回调
var server = app.listen(8081, function () {   
    var host = server.address().address;  //地址
   var port = server.address().port;  //端口
        console.log("应用实例,访问地址为 http://%s:%s", host, port);
    });
})

使用node执行js:

image.png

运行结果:

image.png

5.5、使用Nodeclipse开发Express项目

如果直接使用记事本效率会不高,nodeclipse插件可以方便的创建一个Express项目,步骤如下:

63651-20161222095037417-402222278.png

创建好的项目如下:

63651-20161222101411276-1040342301 (1).png

app.js是网站:

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 index = require('./routes/index');
var users = require('./routes/users');
var app = express();
//指定视图引擎为ejs
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
// uncomment after placing your favicon in /public//
app.use(favicon(path.join(__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('/', index);
app.use('/users', users);
// catch 404 and forward to error handler
app.use(function(req, res, next) {  
var err = new Error('Not Found');  
err.status = 404;  next(err);});
// error handler
app.use(function(err, req, res, next) {  
// set locals, only providing error in development  
res.locals.message = err.message;  
res.locals.error = req.app.get('env') === 'development' ? err : {};  
// render the error page  
res.status(err.status || 500);  
res.render('error');});
module.exports = app;
bin\www是web服务器:
#!/usr/bin/env node/** * 依赖模块,导入 */
var app = require('../app');
var debug = require('debug')('nodejsexpress:server');
var http = require('http');
/** 
* 从上下文环境中获得监听端口,如果空则3000 
*/
var port = normalizePort(process.env.PORT || '3000');
app.set('port', port);
/** 
* 创建Web服务器 
*/
var server = http.createServer(app);
/** 
* 开始监听 
*/
server.listen(port);server.on('error', onError);  
//指定发生错误时的事件
server.on('listening', onListening);  
//当监听成功时的回调
/** 
* 规范化端口 
*/
function normalizePort(val) {  
    var port = parseInt(val, 10);  
    if (isNaN(port)) {    
        // named pipe    
        return val;  
    }  
    if (port >= 0) {    
        // port number    
        return port;  
    }  
    return false;
}
/** 
*错误事件监听 
*/
function onError(error) {  
    if (error.syscall !== 'listen') {    
        throw error;  
    }  
    var bind = typeof port === 'string'    ? 'Pipe ' + port    : 'Port ' + port;  
//错误处理  
    switch (error.code) {    
        case 'EACCES':      
            console.error(bind + ' requires elevated privileges');      
            process.exit(1);  
//结束程序      
        break;    
        case 'EADDRINUSE':      
            console.error(bind + ' is already in use');      
            process.exit(1);      
        break;    
        default:      
            throw error;  
}}
/** 
* 当用户访问服务器成功时的回调 
*/
function onListening() {  
    var addr = server.address();  
    var bind = typeof addr === 'string'    ? 'pipe ' + addr    : 'port ' + addr.port;  
    debug('Listening on ' + bind);
}

routers/index.js路由,有点类似控制器或Servlet:

var express = require('express');
var router = express.Router();
/* 获得首页 
*/
router.get('/', function(req, res, next) {  
    res.render('index', { title: 'Express' });
});
module.exports = router;

views/index.ejs首页视图:

<!DOCTYPE html>
<html>  
    <head>    
        <title>
        <%= title %></title>    
        <link rel='stylesheet' href='/stylesheets/style.css' />  
    </head>  
    <body>    
        <h1><%= title %></h1>    
        <p>Welcome to <%= title %></p>  
    </body>
</html>

在www上右键选择“运行方式”->“Node Application”运行结果:

63651-20161222102937776-605885718.png

63651-20161222103103417-546409240.png


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值