使用mvc7

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用mvc7相关的知识,希望对你有一定的参考价值。

MVC

我们已经可以用koa处理不同的URL,还可以用Nunjucks渲染模板。现在,是时候把这两者结合起来了!

当用户通过浏览器请求一个URL时,koa将调用某个异步函数处理该URL。在这个异步函数内部,我们用一行代码:

ctx.render(home.html,  name: Michael );

通过Nunjucks把数据用指定的模板渲染成HTML,然后输出给浏览器,用户就可以看到渲染后的页面了:

使用mvc7_MVC

这就是传说中的MVC:Model-View-Controller,中文名“模型-视图-控制器”。

异步函数是C:Controller,Controller负责业务逻辑,比如检查用户名是否存在,取出用户信息等等;

包含变量​​ name ​​的模板就是V:View,View负责显示逻辑,通过简单地替换一些变量,View最终输出的就是用户看到的HTML。

MVC中的Model在哪?Model是用来传给View的,这样View在替换变量的时候,就可以从Model中取出相应的数据。

上面的例子中,Model就是一个javascript对象:

 name: Michael 

下面,我们根据原来的​​url2-koa​​创建工程​​view-koa​​,把koa2、Nunjucks整合起来,然后,把原来直接输出字符串的方式,改为​​ctx.render(view, model)​​的方式。

工程​​view-koa​​结构如下:

view-koa/
|
+- .vscode/
| |
| +- launch.json <-- VSCode 配置文件
|
+- controllers/ <-- Controller
|
+- views/ <-- html模板文件
|
+- static/ <-- 静态资源文件
|
+- controller.js <-- 扫描注册Controller
|
+- app.js <-- 使用koa的js
|
+- package.json <-- 项目描述文件
|
+- node_modules/ <-- npm安装的所有依赖包

在​​package.json​​中,我们将要用到的依赖包有:

"koa": "2.0.0",
"koa-bodyparser": "3.2.0",
"koa-router": "7.0.0",
"nunjucks": "2.4.2",
"mime": "1.3.4",
"mz": "2.4.0"

先用​​npm install​​安装依赖包。

然后,我们准备编写以下两个Controller:

处理首页 GET /

我们定义一个async函数处理首页URL​​/​​:

async (ctx, next) => 
ctx.render(index.html,
title: Welcome
);

注意到koa并没有在​​ctx​​对象上提供​​render​​方法,这里我们假设应该这么使用,这样,我们在编写Controller的时候,最后一步调用​​ctx.render(view, model)​​就完成了页面输出。

处理登录请求 POST /signin

我们再定义一个async函数处理登录请求​​/signin​​:

async (ctx, next) => 
var
email = ctx.request.body.email || ,
password = ctx.request.body.password || ;
if (email === admin@example.com && password === 123456)
// 登录成功:
ctx.render(signin-ok.html,
title: Sign In OK,
name: Mr Node
);
else
// 登录失败:
ctx.render(signin-failed.html,
title: Sign In Failed
);

由于登录请求是一个POST,我们就用​​ctx.request.body.<name>​​拿到POST请求的数据,并给一个默认值。

登录成功时我们用​​signin-ok.html​​渲染,登录失败时我们用​​signin-failed.html​​渲染,所以,我们一共需要以下3个View:

  • index.html
  • signin-ok.html
  • signin-failed.html

以上是关于使用mvc7的主要内容,如果未能解决你的问题,请参考以下文章

第一篇 用于测试使用

在使用加载数据流步骤的猪中,使用(使用 PigStorage)和不使用它有啥区别?

今目标使用教程 今目标任务使用篇

Qt静态编译时使用OpenSSL有三种方式(不使用,动态使用,静态使用,默认是动态使用)

MySQL db 在按日期排序时使用“使用位置;使用临时;使用文件排序”

使用“使用严格”作为“使用强”的备份