码迷,mamicode.com
首页 > Web开发 > 详细

【node.js学习】--(4)--Express4.x框架

时间:2015-03-01 00:21:35      阅读:258      评论:0      收藏:0      [点我收藏+]

标签:node.js

Express是Nodejs标准的web开发框架

  

参考http://blog.fens.me/nodejs-express4/

安装项目构建器

先安装 npminstall -g express

再安装npm install -gexpress-generator  #全局安装-g

检查安装结果 express -V# 检查express的版本

技术分享

卸载(需要时使用)

npm uninstall-g express

 

参考

http://blog.csdn.net/JBBOY/article/details/25038299

http://jingyan.baidu.com/album/922554468a3466851648f419.html?picindex=1

创建项目

express -enodejs-demo

 技术分享

进入项目目录,下载依赖库,构建项目。

cd nodejs-demo && npm install

技术分享

启动项目

npm start

效果如下图

技术分享

技术分享

目录结构说明

nodejs-demo/

├──app.js  应用核心配置文件

├──bin  启动项目的脚本文件

├──node_modules  项目依赖库

├──package.json  项目依赖配置及开发者信息

├──public  静态文件(css,js,img)

├──routes  路由文件(MVC中的C,controller)

└──views  页面文件(Ejs模板)

package.json

其中scripts属性是用于定义操作命令的,可以非常方便的增加启动命令,比如默认的start,用npm start代表执行node ./bin/www命令。

app.js文件

//加载依赖库,原来这个类库都封装在connect中,现在需地注单独加载

varexpress = require(‘express‘);

varpath = require(‘path‘);

varfavicon = require(‘serve-favicon‘);

varlogger = require(‘morgan‘);

varcookieParser = require(‘cookie-parser‘);

varbodyParser = require(‘body-parser‘);

 

//加载路由控制

varroutes = require(‘./routes/index‘);

//varusers = require(‘./routes/users‘);

 

//创建项目实例

varapp = express();

 

//定义EJS模板引擎和模板文件位置,也可以使用jade或其他模型引擎

app.set(‘views‘,path.join(__dirname, ‘views‘));

app.set(‘viewengine‘, ‘ejs‘);

 

//定义icon图标

app.use(favicon(__dirname+ ‘/public/favicon.ico‘));

//定义日志和输出级别

app.use(logger(‘dev‘));

//定义数据解析器

app.use(bodyParser.json());

app.use(bodyParser.urlencoded({extended: false }));

//定义cookie解析器

app.use(cookieParser());

//定义静态文件目录

app.use(express.static(path.join(__dirname,‘public‘)));

 

//匹配路径和路由

app.use(‘/‘,routes);

//app.use(‘/users‘,users);

 

//404错误处理

app.use(function(req,res, next) {

    var err = new Error(‘Not Found‘);

    err.status = 404;

    next(err);

});

 

//开发环境,500错误处理和错误堆栈跟踪

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

        });

    });

}

 

//生产环境,500错误处理

app.use(function(err,req, res, next) {

    res.status(err.status || 500);

    res.render(‘error‘, {

        message: err.message,

        error: {}

    });

});

 

//输出模型app

module.exports= app;

 

www文件

www文件也是一个node的脚本,用于分离配置和启动程序。

查看./bin/www文件。

 

#!/usr/bin/envnode  

 

/**

 * 依赖加载

 */

varapp = require(‘../app‘);

vardebug = require(‘debug‘)(‘nodejs-demo:server‘);

varhttp = require(‘http‘);

 

/**

 * 定义启动端口

 */

varport = normalizePort(process.env.PORT || ‘3000‘);

app.set(‘port‘,port);

 

/**

 * 创建HTTP服务器实例

 */

varserver = http.createServer(app);

 

/**

 * 启动网络服务监听端口

 */

server.listen(port);

server.on(‘error‘,onError);

server.on(‘listening‘,onListening);

 

/**

 * 端口标准化函数

 */

functionnormalizePort(val) {

  var port = parseInt(val, 10);

  if (isNaN(port)) {

    return val;

  }

  if (port >= 0) {

    return port;

  }

  return false;

}

 

/**

 * HTTP异常事件处理函数

 */

functiononError(error) {

  if (error.syscall !== ‘listen‘) {

    throw error;

  }

 

  var bind = typeof port === ‘string‘

    ? ‘Pipe ‘ + port

    : ‘Port ‘ + port

 

  // handle specific listen errors withfriendly messages

  switch (error.code) {

    case ‘EACCES‘:

      console.error(bind + ‘ requires elevatedprivileges‘);

      process.exit(1);

      break;

    case ‘EADDRINUSE‘:

      console.error(bind + ‘ is already inuse‘);

      process.exit(1);

      break;

    default:

      throw error;

  }

}

 

/**

 * 事件绑定函数

 */

functiononListening() {

  var addr = server.address();

  var bind = typeof addr === ‘string‘

    ? ‘pipe ‘ + addr

    : ‘port ‘ + addr.port;

  debug(‘Listening on ‘ + bind);

}

参考

http://blog.fens.me/nodejs-express4/

【node.js学习】--(4)--Express4.x框架

标签:node.js

原文地址:http://blog.csdn.net/tianxuzhang/article/details/43993211

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!