路由器、响应与渲染

简单来说,下面的伪代码函数,就说明了web工作的流程:

// router路由器,根据/mydog知道应该用相应的 handle 处理器来处理这个请求。
router(“/mydog”, function handle(req,res){
     req // 请求对象,记录有客户端请求的所有信息,告诉你,他要什么。
     res // 响应对象,你可以通过它,把数据交给客户端
}

这就是web工作的流程,very easy。

express也就是做到基础的这一点,并且它也会更完善,让我们这些使用它的人更加轻松愉快。

路由器

express 的路由器表现形式是:

app.get(“/xxx”,function router_handle(req,res){
     // 好像和刚才的没什么两样
})

god注意这里的get表示客户端通过get方法进行请求,那么修改后,下面是采用post方法进行请求。

app.post(“/xxx”,function router_handle(req,res){
     // 好像和刚才的还是没什么两样,毫无违和感!
})

简单点好。复杂很容易,但简化却是最难的,往往真正的好东西,就是那么简单直接。

good当然 get 和post方法之外还可能用到 delete / put 或自己创建的方法,在浏览器不支持,但可以通过一个参数搞定:

<form method=”post”>
<input type=”hidden” name=”_method” value=”put”  />  
</form>

在服务器端需要加入一个插件

var methodOverride = require(“method-override”);
app.use(methodOverride('_method'));

app.get / app.post 这种路由的方式不是太好,我们需要更好组织路由的方式,可以采用 express.Router 类创建更好的路由方式。

userRouter.js 

// userRouter.js
var router = express.Router();

router.get(“/”,function(req,res){

})


router.put(“/update”,function(req,res){

})

module.exports = router;

main.jssex

……

app.use(“/user”,require(“./userRouter”)); // 加入路由

那么,在浏览器访问时,就可以通过 /user 和 /user?_method=put 方式调用对应的路由处理器。

一个web应用程序可能有很多路由,我们可以通过这种切分的方式来模块化路由,便于管理。

页面渲染

页面渲染也可以叫动态页面渲染,随便你叫什么。我们知道动态模版引擎有很多,最终都是要生成一个html页面,无论哪个引擎再高深,原理只有一个:“ 模版引擎的作用就是,通过把数据注入到模版中,转换一个html页面,一个模版通过给定数据的不同,生成的html页面也不相同,所以叫做动态页面。 ”

我们知道response响应对象,它有很多方法可以用于响应。

res.send(“hello”); // 浏览器会看到hello 

res.render(“index.html”,{title:”world”});  // 会渲染一个页面

res.download(“/my.pdf”);   // 浏览器会下载一个文件。

还有很多方法,这里的 res.render 方法是渲染一个页面,但响应方法不只是渲染页面,可以下载,还可以只是一个字符串等等。之后的章节会详细介绍这些知识。