express创建项目

命令行下:

  express prj_name

  cd prj_name && npm install

ejs html

var ejs = require('ejs'); //增加
app.set('views', path.join(__dirname, 'public/views'));//设置模板文件夹路径,可自己指定
app.engine('html',ejs.__express); //增加
app.set('view engine', 'html');//设置使用的模板引擎

配置端口监听

app.set('env', process.env.NODE_ENV || 'development');
app.set('port', app.config.server.port || 3000);

解读app.js

require之后创建一个express应用程序:

var app = express();

这个可以留在app.js中

配置

接下来是一大段的app.set 和 app.use:

// all environments
app.set('port', process.env.PORT || 3000);
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.bodyParser());
app.use(express.methodOverride());
app.use(express.cookieParser('your secret here'));
app.use(express.session());
app.use(app.router);
app.use(require('less-middleware')({ src: __dirname + '/public' }));
app.use(express.static(path.join(__dirname, 'public'))); // development only
if ('development' == app.get('env')) {
app.use(express.errorHandler());
}

app.set用来设置环境变量,第一个参数是环境变量的name,第二个参数是值;在其他需要访问环境变量的地方,可以用app.get获取,比如上面的app.get('env')。下面是一些内建Express环境变量:

  • env 运行时环境,默认为 process.env.NODE_ENV 或者 "development"
  • trust proxy 激活反向代理,默认未激活状态
  • jsonp callback name 修改默认?callback=的jsonp回调的名字
  • json replacer JSON replacer 替换时的回调, 默认为null
  • json spaces JSON 响应的空格数量,开发环境下是2 , 生产环境是0
  • case sensitive routing 路由的大小写敏感, 默认是关闭状态, "/Foo" 和"/foo" 是一样的
  • strict routing 路由的严格格式, 默认情况下 "/foo" 和 "/foo/" 是被同样对待的
  • view cache 模板缓存,在生产环境中是默认开启的
  • view engine 模板引擎
  • views 模板的目录

我们用到了最后两个,设置了页面显示的模板引擎和保存模板的目录。

设置app.use([path], function)是指在访问前缀为path的路径执行时中间函数function,上面的代码中没有指定path,则表示在访问默认前缀/的路径时执行中间函数function。比如上面代码中的

app.use(require('less-middleware')({ src: __dirname + '/public' }));
app.use(express.static(path.join(__dirname, 'public')));

在访问请求静态文件/stylesheets/style.css时,就会先执行less-middleware,再执行express.static,返回public/stylesheets/style.css给浏览器端。

app.use() 的出场顺序非常重要,use的先后顺序决定了中间函数的优先级。 比如express.logger() 通常是第一个,可以记录全部请求。如果不想记录静态文件的请求,可以把less-middleware和 app.use(express.static)放到logger前面。

在express以前的版本中有个app.configure()方法,该方法虽然仍得以保留,但推荐使用if代替:

if ('development' == app.get('env'))

因为以后还会有很多配置,所以我们要把这部分内容提取出来放到单独的文件中,创建/config/express.coffee做这些配置,而在app.js中用require代替这部分代码:

require('./config/express')(app);

express.favicon(iconPath):用来设置网站的图标,参数为图标的路径。如果不指明,则用默认的express图标。可以修改为:

app.use(express.favicon(path.join(__dirname, '../public/img/favicon.ico')))

express.bodyParser(): 对请求内容进行解析,支持json、 application/x-www-form-urlencoded、multipart/form-data 格式数据的解析。也就是说ajax和form发送请求时,都会经过它的处理,方便在req中获取相应的请求值。在express中处理文件上传也是用它,可以给出参数指明上传文件存放的路径,比如:

app.use(express.bodyParser({uploadDir:'./uploads'}))

express.methodOverride():为了支持put、delete等HTTP方法,不过要客户端配合,包含相应的_method参数,比如:

<form action='/users/1'> ...
<input type="hidden" name="_method" value="put" />
</form>

可以对应到:app.put('/users/:id', users.put)

app.use(express.cookieParser('your secret here'));app.use(express.session());:是为了支持session,在这样的设置中,session会被加密保存在客户端的cookie,但这样程序重启后session就不起作用了,不过express.session支持session的持久化保存,因为express用的最多的数据库就是mongo,所以下面给出用mongo保存session的配置。首先要在package.json里加上依赖项connect-mongo

"connect-mongo": "0.3.3"

然后在config/express.coffee中引入connect-mongo,并修改express.session的设置:

mongoStore = require('connect-mongo')(express)

app.use express.session
secret: '1234567890'
store: new mongoStore
url: config.db,
collection : 'sessions'

app.routerconnect router的加强版,用来处理app.getapp.post等请求处理设置,在浏览器访问这些设置中对应的url时,express.router会调用相应的function。如果不显式调用app.use(app.router),express会在第一次碰到app.get(...)之类的设置时隐含调用,所以这个可以不用出现在配置项里,但.use的顺序很关键,所以显式调用比较好。比如在use中出现app.use(express.static(path.join(__dirname, 'public')));时,如果router没有出现,或被放在了它后面,那服务器每次遇到请求就会到硬盘上找有没有对应的静态文件,会造成性能下降

启动

文件最后的代码是启动服务器,并输出一段日志:

http.createServer(app).listen(app.get('port'), function(){
console.log('server listening on port ' + app.get('port'));
});

这个也要保留在app.js中



【NodeJS】---express配置ejs mongoose route等的更多相关文章

  1. webstorm+nodejs+express配置

  2. nodejs+express+ejs+mongoose实例

    nodejs+express+ejs+mongoose实例 nodejs学得异常痛苦,在这里将学的东西做一番整理,算是自我安慰吧.根据网上todo示例,用express和mongoose重写了部分代码 ...

  3. Nodejs express中创建ejs项目,解决express下默认创建jade,无法创建ejs问题

    最近在看<Node.js开发指南>,看到使用nodejs进行web开发的时候,准备创建ejs项目遇到问题了, 书上命令为: express -t ejs microblog 可是执行后,仍 ...

  4. Nodejs express中创建ejs项目 error install Couldn't read dependencies

    最近在看<Node.js开发指南>,看到使用nodejs进行web开发的时候,准备创建ejs项目遇到问题了   书上命令为:   express -t ejs microblog 可是执行 ...

  5. Windows环境下,从零开始搭建Nodejs+Express+Ejs框架(二)---安装Express,ejs

    安装Express,ejs的前提是一定要先安装nodejs,具体安装方法请查看 http://www.cnblogs.com/tfiremeteor/p/8973105.html 安装Express和 ...

  6. nodejs express route 的用法

    express 中文社区:http://expressjs.jser.us/community.html nodejs express route 的用法 1. 首先是最基本的用法. 1 2 3 4 ...

  7. NodeJS - Express 3.0下ejs模板使用 partial展现 片段视图

    如果你也在看Node.js开发指南,如果你也在一步一步实现 microBlog 项目!也许你会遇到本文提到的问题,如果你用的是Express 3.0 本书实例背景是 Express 2.0 而如今升级 ...

  8. 只需几分钟跟小猫学前端(内含视频教程):nodejs基础之用express、ejs、mongdb建设简单的网站

    开门见山视频教程 https://v.qq.com/x/page/d0645s79xrq.html 前 言: 这是小猫的第二篇node教程,第一篇教程是一个简单的试水,小猫的node教程面向对象为没有 ...

  9. nodejs+express Mvc站点

    nodejs+express Mvc站点 像asp.net Mvc一样开发nodejs+express Mvc站点 首先,我是个c#码农.从事Mvc开发已然4个年头了,这两年前端MVC的兴起,我也跟风 ...

随机推荐

  1. MHA高可用+VIP 集群故障转移(已测试成功)

       服务器部署说明192.168.158.201 mha管理,mysql主服192.168.158.202 mha节点,mysql从服192.168.158.203 mha节点,mysql从服Man ...

  2. Generate the Jobs script from msdb Database

    前两周,由于数据库简繁体的转换,大量的数据库需要转到新的服务器. 在转其中的一台的时候,原先导出来的JOBS脚本不翼而飞(原因至今未明),而恰巧这一台服务器有90多个JOB(看下图恢复后的,注意滚动条 ...

  3. javascript第三方组件

    一.一个javascript文件上传组件.转载:http://www.cnblogs.com/fumj/archive/2012/12/07/2806673.html http://fineuploa ...

  4. IE下实现类似CSS3 text-shadow文字阴影的几种方法

    IE下实现类似CSS3 text-shadow文字阴影的几种方法 一.开始的擦边话 为了测试IE9浏览器,下午晃晃荡荡把系统换成window7的了.果然,正如网上所传言的一样,IE9浏览器确实不支持C ...

  5. Could not load the assembly 'App_Web_cwclgcuu'. Make sure that it is compiled before accessing the page.

    将网站迁移到windows server 2012 R2(64 bit), IIS 6.2(build 9200)上,爆出这个错误. 解决:右键相应的application pool,选择“Set A ...

  6. UVALive 4225 Prime Bases 贪心

    Prime Bases 题目连接: https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&a ...

  7. Shell脚本[运算表达式,条件控制语句]

    #!/bin/bash #你值得收藏的四则表达式运算. val1=1 val2=1 val3=1 val4=1 val5=1 val6=1 val7=1 let val1++ ((val2++)) v ...

  8. 【JavaScript】前端开发框架三剑客—AngularJS VS. Backone.js VS.Ember.js

    摘要:透过对Github,StackOverflow,YouTube等社区进行数据收集后可知,AngularJS在各大主流社区中都是最受欢迎的,Backbone.js与Ember.js则不相伯仲.本文 ...

  9. [AngularJS] Adding custom methods to angular.module

    There are situations where you might want to add additional methods toangular.module. This is easy t ...

  10. android之BitmapFactory.Options的使用

    怎样获取图片的大小? 首先我们把这个图片转成Bitmap,然后再利用Bitmap的getWidth()和getHeight()方法就可以取到图片的宽高了. 新问题又来了,在通过BitmapFactor ...