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

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhang__tianxu/article/details/43993211

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/

猜你喜欢

转载自blog.csdn.net/zhang__tianxu/article/details/43993211