node.js Web应用框架Express.js(一)

什么是Express.js

Express 是一个简洁而灵活的 node.js Web应用框架, 提供一系列强大特性帮助你创建各种Web应用,提供丰富的HTTP工具以及来自Connect框架的中间件随取随用,创建强健、友好的API变得快速又简单,Express 不对 node.js 已有的特性进行二次抽象,只是在它之上扩展了Web应用所需的功能。

开篇,这里就只做简单的介绍,整理一些有关express.js的资源,与大家一起学习

Express.js中文社区:http://expressjs.jser.us/

Express.js 中文入门指引手册:http://my.oschina.net/youdoce/blog/68476

Nodejs开发框架Express3.0开发手记–从零开始:http://blog.fens.me/nodejs-express3/

Expressjs中文平台:http://www.expressjs.com.cn/

Node.js 入门: https://cnodejs.org/getstart

csdn中博文expressjs教程:http://blog.csdn.net/chszs/article/details/8869655

Node.js开发框架Express4.x:http://blog.fens.me/nodejs-express4/

 

记住我们用node+express+bowser,是bower 进行下载依赖js需要先安装好git。

express启动文件,app.js:

// 加载依赖库,原来这个类库都封装在connect中,现在需地注单独加载
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 users = require('./routes/users');

// 创建项目实例
var app = express();

// 定义EJS模板引擎和模板文件位置,也可以使用jade或其他模型引擎
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', '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;

项目启动代码也被移到./bin/www的文件,www文件也是一个node的脚本,用于分离配置和启动程序,源码:

#!/usr/bin/env node   

/**
 * 依赖加载
 */
var app = require('../app');
var debug = require('debug')('nodejs-demo:server');
var http = require('http');

/**
 * 定义启动端口
 */
var port = normalizePort(process.env.PORT || '3000');
app.set('port', port);

/**
 * 创建HTTP服务器实例
 */
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)) {
    return val;
  }
  if (port >= 0) {
    return port;
  }
  return false;
}

/**
 * HTTP异常事件处理函数
 */
function onError(error) {
  if (error.syscall !== 'listen') {
    throw error;
  }

  var bind = typeof port === 'string'
    ? 'Pipe ' + port
    : 'Port ' + port

  // handle specific listen errors with friendly messages
  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);
}

 

写烂了的node例子:

var http = require("http"),
    open = require("child_process");
    
console.log("启动httpserver服务");
var server = http.createServer(function(req,res){
    res.writeHead(200,{"Content-Type":"text/html;charset=UTF-8"});
    res.write("开始\n");
    res.end("我来了");
});

server.listen(3000,"127.0.0.1");
open.exec("start http://127.0.0.1:3000");

console.log("3000端口。")
var net = require("net"),
    open = require("child_process");

console.log("启动httpserver服务");

var server = net.createServer(function(req,res){

    //设置请求编码
    socket.write("Echo server \r\n");
})

 node 项目经常需要安装的模块在项目根目录进行安装:

npm install express
npm install jade
npm install mongoose
npm install bower -g
bower install bootstrap

 经典教程:用 Express 4.0 重写《Node.js 开发指南》第5章的项目实例

posted @ 2015-03-05 13:36  小小平凡世界  阅读(1306)  评论(0编辑  收藏  举报