node.js工程的结构

   我们使用express生成了package.json,它只产生了javascript的app.js和routes/index.js。模版引擎ejs有文件index.ejs,此外还有样式表style.css。
     12讲问题:创建工程时候一直使用jade。要求用ejs

一、app.js 工程的入口。

        分析代码:
/**
 * Module dependencies.
 */
/*引用模块*/
var express = require('express')
  , routes = require('./routes')
  , user = require('./routes/user')
  , http = require('http')
  , util=require('util')
  , path = require('path')
  ,engine=require('./system');
/*实例化express对象*/
var app = express();

/*配置app的参数和启用中间件*/
app.configure(function(){
  app.set('port', process.env.PORT || 3000);
  //告诉我们的页面模版目录
  app.set('views', __dirname + '/views');
  //告诉它我们使用那种模版引擎
  app.set('view engine', 'ejs');
  app.use(express.favicon());
  app.use(express.logger('dev'));
  app.use(express.bodyParser());
  app.use(express.methodOverride());
  app.use(app.router);
  app.use(express.static(path.join(__dirname, 'public')));
});

//配置开发模式
app.configure('development', function(){
  app.use(express.errorHandler());
});
//指定路由控制
app.get('/', routes.index);
app.get('/pcat', routes.pcat);
app.get('/user/:username',function(req,res){
            res.send("user :"+req.params.username);
        });

app.get('/users', user.list);
app.all('/test/:username',function(req,res,next){
	console.log("all methods is call");
	//我们在这里验证用户名是否存在。
	//如果存在直接send或者调用next(new Error('用户已经存在'));
	//如果不存在我们调用next()把控制权交给下一个路由规则
	next();
	res.send('all的路由规则完毕。')
});
 app.get('/test/:username',function(req,res){
     res.send("user:"+req.params.username)
})
app.get('/abc',routes.pcat)
//改造ejs引擎中的方法
app.engine('ejs', engine);
//将layout的模版布局模版设置为默认
app.locals._layoutFile='layout'
//片段视图
app.get('/list',function(req,res){
	res.render('list',{
		title:'片段视图',
		items:['marico',1991,'pcat']
	})
});
//视图助手
app.locals({
	inspect:function(obj){
		return util.inspect(obj,true)+"    解析成功";
	}
})
app.get('/view',function(req,res){
	res.locals({
		headers:function(req,res){
			return req.headers;
		}
	})
	res.render('view',{title:"PCAT"});
})
//创建服务并监听端口
http.createServer(app).listen(app.get('port'), function(){
  console.log("Express server listening on port " + app.get('port'));
});

            1.我们导入了express模块,前面我们通过npm install依赖上了,在这里就可以直接通过require获取、

            2.routes是一个文件夹形式的本地模块,即./routes/index.js,他的功能是为指定的路径组织返回内容,相对于mvc架构中的控制器。

            3.app.set是Express的参数设置工具,接受一个键(key)和一个值(value),可以用的参数如下:

                basepath:基础机制,通常用于res.redirect()跳转
                views:视图文件的目录,存放模版文件
                port:指定的端口
                view engine:视图模块引擎(推荐使用ejs)
                view options:全局视图参数对象
                view cache:启用视图缓存
                case sensitive routes:路径区分大小写
                strict routing:严格路径,启用后不会忽略路径末尾的"/"
                jsonp callback:开启透明的jsonp支持

         4.Express依赖于connect,connect更加短小精悍,是一个偏向基础设施的框架,提供了大量的中间件,可以通过app.use启用。

         中间件:一系列的组件连接到一起,然后让http的请求依次流过这些组件。这些被connect串联起来的组件被称为中间件
         app.configure中启用了五个中间件:
            bodyParser:解析客户端请求。
            router:项目的路由支持
            static:提供静态文件支持。
            methodOverride:函数重写
            errorHandler:错误控制器
            connect详解: http://cnodejs.org/topic/4fb79b0e06f43b56112b292c

        5.app.get('/',routes.index),是一个路由控制器,用户如果访问'/'路径,则routes.index来控制。

        6.通过express.createServer()函数创建一个应用的实例

     二、routes/index.js是路由文件,相当于控制器,用于组织展示的内容。

    app.js中通过app.get('/',routes.index)将'/'路径映射到exports.index函数下,其中只有一个语句,res.render('index',{title:"pcat"}),功能是调用模版解析引擎,并传入一个对象作为参数,这个对象只有一个属性,即title
三、index.ejs模版文件,即routes.index.js中调用的模版。
        它的基础是HTML语言(我们降低了学习难度),其中包含了<%=title%>的标签,功能是显示引用的变量。即res.render函数的第二个参数出啊如的对象的属性.
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值