node.js中MVC模式应用
全称Model(模型)-View(视图)-Controller(控制器),这是一种开发模式,他的好处是可以将界面和业务逻辑分离.
views视图 index.ejs
<div class="form-group">
<label for="exampleInputFile">File input</label>
<input type="number" id="numbertxt" class="form-control">
</div>
<button type="button" class="btn btn-primary" id="btn">查询</button>
//记得引入jQuery.min.js
<script type="text/javascript">
$("#btn").click(function(){
var number = $("#numbertxt").val();
window.location = "/"+number //跳转
})
</script>
结果视图result.ejs
<div class="container">
<div class="row">
<h3>结果页面</h3>
<p>数字<%= number %></p>
<ul>
<% for(var i=0;i<resultArr.length;i++) {%>
<li><%= resultArr[i] %></li>
<% } %>
</ul>
</div>
</div>
//记得引入jQuery.min.js
<script type="text/javascript">
$("#btn").click(function(){
var number = $("#numbertxt").val();
window.location = "/"+number //跳转
})
</script>
入口文件 app.js.
// An highlighted block
var express = require("express");
var main = require("./controllers/main.js")
var app =express();
//配置模板引擎
app.set("view engine","ejs");
//路由表
//app.get("/",function(req,res){
//使用view/index.ejs文件当做视图
// res.render("index",{})
})
//路由表,中间件
app.get("/",main.showIndex);
app.get("/:number",main.showResult);
//配置静态资源文件 放在public文件夹下
app.use(express.static("public"));
//监听端口
app.listen(8008);
controller控制器 controllers文件夹下 路由文件 main.js.
var math = require("../models/math.js")
var file = require("../models/file.js")
//暴露出去
exports.showIndex = function(req,res){
res.render("index",{})
}
exports.showResult = function(req,res){
//localhost:80008/12345
var number = req.params.number;
//记录时间T1
var T1 = new Date()
//定义一个空间存放处理结果值
var datas = {
number:req.params.number,
resultArr:[],
time:''
.......
}
//命令模型(小兵)来计算
//先读取 这是一个异步函数
file.read(number,function(resultArr){
if(resultArr == -1){
//表示当前这个文件还不存在
//计算 这是一个同步函数
var resultArr = math.calc(number)
//保存
file.save(number,resultArr)
}
//记录时间T2
var T2 = new Date()
datas.time = T2 - T1
//呈递视图
datas.resultArr = resultArr
res.render("result",datas)
})
}
model层 math.js
//暴露出去
//计算
exports.calc= function(number){
//一系列数据操作
return 处理结果
}
model层 file.js
var fs = require("fs");
//保存
exports.save= function(number,resultArr){
fs.writeFile("./data/"+number+".txt",JSON.stringify(resultArr))
}
//读取
exports.read = function(number,callback){
fs.readFile("./data/"+number+".txt",function(err,data){
if(err){
callback(-1);//异步不能通过return来返回必须通过回调函数
return;
}
callback(JSON.parse(data))
})
}