【NodeJS】---express配置ejs mongoose route等

express建立项目

命令行下:css

  express prj_namehtml

  cd prj_name && npm installnode

ejs htmlgit

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

 配置端口监听github

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

解读app.js

require以后建立一个express应用程序:ajax

var app = express();

 

这个能够留在app.js中数据库

配置

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

// 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环境变量:npm

  • 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 模板的目录

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

设置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中

相关文章
相关标签/搜索