@greenfavo
2015-08-18T09:45:09.000000Z
字数 2569
阅读 757
nodejs
1,安装express
为了使用express的命令,需要全局安装
npm install -g express
4.x后的版本需要装express-generator才能使用express的命令
用ejs初始化项目结构,在当前目录下创建weibo子目录
express -e ejs weibo
express3以上版本默认把ejs模板引擎中的layout取消了,所以不会在views文件夹下生成layout.ejs。如果要使用,需要到项目目录下运行以下命令,将layout安装到node_modules中
npm install express-partials
然后在app.js 里面引用 express-partials,引用方法:
1.添加引用 var partials = require('express-partials');
2.在 app.set('view engine', 'ejs'); 下面添加 app.use(partials());
在需要引用模板的地方调用 layout:'模版名称' 示例
app.get('/reg', function (req, res) {
res.render('reg', {
title: '用户注册',
layout: 'template'
});
});
用supervisor自动重启nodejs服务器,监控代码变化
比如下面的命令
supervisor app.js将自动重启服务器
app.js
var express = require('express');
var routes = require('./routes/index');
var users = require('./routes/users');
var app = express();
//路由定向
app.use('/', routes);
app.use('/users', users);
//创建服务器
var server=app.listen(3000,function(){
var host=server.address().address;
var port=server.address().port;
console.log("test app listening at http://%s:%s",host,port);
})
routes文件夹下user.js路由配置
var express = require('express');
var router = express.Router();
/* GET users listing. */
router.get('/', function(req, res, next) {
res.send('respond with a resource');
});
router.get("/:username",function(req,res){
res.send("user: "+req.params.username);
})
module.exports = router;
在浏览器中输入localhost:3000/user/green就会输出user:green
next()可以改变路由的转移,express默认先匹配最先定义的同名路由,要想执行后面的路由,用next转移
router.all("/:username",function(req,res,next){
//注意同名路由不能发送多次响应内容,不然下一个同名路由不被执行
res.send("all methods captured");//执行该句后请求就关闭了
next();
})
router.get("/:username",function(req,res){
res.send("user: "+req.params.username);//会报错,说headers已发送,不能再设置
})
1,使用ejs模板,它只有以下3中标签
<% code %>//javascript代码
<%= code %>//显示替换过HTML特殊字符的内容
<%-code-%>显示原始的HTML内容
所有模板默认继承layout.ejs中的模板,因此可以将每个页面都用到的导航和footer部分放到layout模板中
2,通过设置layout的属性指定模板
app.get('/reg', function (req, res) {
res.render('reg', {
title: '用户注册',
layout: 'templateName'
});
});
3,express3.0后不支持partial函数,要这样手动引用
首先安装express-partials到项目目录
然后在app.js中require进来,并且在app.js中写上
var partials=require("express-partials");
app.use(partials());
partial是一个可以在视图中使用的函数,它接受两个参数,第一个是片段视图的名称,第二个可以是一个对象或一个数组。如果是一个对象,那么片段视图中上下文变量引用的就是这个对象;如果是一个数组,那么其中每个元素依次被迭代应用到片段视图。片段视图中上下文变量名就是视图文件名,例如下面的'listitems'.
比如在路由文件index.js中写上
router.get("/list",function(req,res){
res.render("list",{
title:"List",
items:["2015","nancy","express","nodejs"],
layout:"template"//template可以是任何名字,不用事先定义template,但一定要写,不然将会输出html源码
});
})
在views文件夹中新建list.ejs文件,内容为
<ul>
//隐式迭代
<%-partial("listitem",items) -%>
</ul>
在建一个listitem.ejs文件
<li><%= listitem %></li>
在浏览器中打开localhost:3000/list将看到生成的li元素(不是源码)
发现在app.js里这样写之后,每个要使用模板的路由都得写上layout:"template",不然浏览器就不能解释成html
app.use(partial());