前言:

  最近在开发一个关于后台管理系统的基础开发平台,解释一下就是不管什么管理系统都有一些相同的功能,但是又有一些细节不一样,这个基础平台就是实现对于基础功能可以进行快速开发,主要有自定义的生成功能代码块,只需要选择一些配置项就能够生成我们需要的页面,主要就是通过nodejs和ejs模板引擎完成这个功能。

正文:

其实实现起来也很简单:

首先就是我们先要搭建需要生成的页面模板,然后通过传递参数来实现生成不同的需求页面,下面贴一些主要的代码:(这里是生成的vue文件,其实不管是html vue文件都一样)

这里是ejs模板
<!-- 查看 -->
<Modal v-model="modal.flag" :title="modal.title" :footer-hide="modal.footer" :width="modal.width" :class="modal.size" :mask="modal.mask">
<Form ref="formItem" :model="formItem" :label-width="120" label-position="right" class="formStyle"><% for (let i=0; i<config.length; i++) { %>
<Row>
<Col span="8">
<FormItem label="<%= config[i].itemName %>:" prop="<%= config[i].itemCode %>"><% if (config[i].inputElement === 'input') { %>
<Input v-model="formItem.<%= config[i].itemCode %>" :readonly="readonly"></Input><% } else if (config[i].inputElement === 'text') { %>
<Input v-model="formItem.<%= config[i].itemCode %>" :readonly="readonly" type="textarea" :rows="4"></Input><% } else if (config[i].inputElement === 'password') { %>
<Input v-model="formItem.<%= config[i].itemCode %>" :readonly="readonly" type="password" :rows="4"></Input><% } else if (config[i].inputElement === 'radio') { %>
<RadioGroup v-model="formItem.<%= config[i].itemCode %>">
<Radio v-for="(item, index) in formItem.<%= config[i].itemCode %>_list" :label="item.value" disabled>{{ item.label }}</Radio>
</RadioGroup><% } else if (config[i].inputElement === 'checkbox') { %>
<CheckboxGroup v-model="formItem.<%= config[i].itemCode %>">
<Checkbox v-for="(item, index) in formItem.<%= config[i].itemCode %>_list" :label="item.value" disabled>{{ item.label }}</Checkbox>
</CheckboxGroup><% } else if (config[i].inputElement === 'switch') { %>
<i-switch v-model="formItem.<%= config[i].itemCode %>" :true-value="open" :false-value="close" size="large" disabled>
<span v-for="(item, index) in formItem.<%= config[i].itemCode %>_list" :slot="item.value" :key="index">{{ item.label }}</span>
</i-switch><% } else if (config[i].inputElement === 'date') { %>
<DatePicker type="date" v-model="formItem.<%= config[i].itemCode %>" :readonly="readonly"></DatePicker><% } else if (config[i].inputElement === 'time') { %>
<TimePicker type="time" v-model="formItem.<%= config[i].itemCode %>" :readonly="readonly"></TimePicker><% } else if (config[i].inputElement === 'tree') { %>
<Input v-model="formItem.<%= config[i].itemCode %>_list" :readonly="readonly"/>
<Input v-model="formItem.<%= config[i].itemCode %>" style="display:none" :readonly="readonly"/><% } else if (config[i].inputElement === 'select') { %>
<Select v-model="formItem.<%= config[i].itemCode %>" disabled>
<Option v-for="(item, index) in formItem.<%= config[i].itemCode %>_list" :value="item.value" :key="index">{{ item.label }}</Option>
</Select><% } %>
</FormItem>
</Col>
</Row><% } %>
</Form>
</Modal>
//这里是生成模板时,通过node服务将后台请求到的数据简单处理一下然后添加到模板中,然后生成vue文件
http.createServer(function(req, res) {
res.writeHead(200, {
'Content-Type': 'text/plain'
});
// 解析 url 参数
let params = url.parse(req.url, true).query
res.end()
console.log("读取模板!"); fs.readFile('./src/views/system-management/FYI/vue.ejs', function(err, data) {
if (err) {
return console.error(err)
}
console.log("异步读取文件数据: " + data.toString()); let template = data.toString()
console.log("columns: " + params.telegram.columns);
console.log(params);
let liquid = {
columns: JSON.parse(params.telegram).columns,
columnsButton: JSON.parse(params.telegram).columnsButton,
modelUrl: JSON.parse(params.telegram).modelUrl,
config: JSON.parse(params.telegram).config,
operationButton: JSON.parse(params.telegram).operationButton,
addCardButton: JSON.parse(params.telegram).addCardButton,
editCardButton: JSON.parse(params.telegram).editCardButton,
columnsField: JSON.parse(params.telegram).columnsField,
formId: JSON.parse(params.telegram).formId,
functionId: JSON.parse(params.telegram).functionId,
sumWidth: JSON.parse(params.telegram).sumWidth,
id: JSON.parse(params.telegram).id
}
let vue = ejs.render(template, liquid)
let vuePath = `./src/views/system-management/FYI/${liquid.formId}.vue`
console.log("数据已成功注入模板中!")
console.log("准备写入文件")
fs.writeFile(vuePath, vue, function(err) {
if (err) {
return console.error(err)
}
console.log("数据写入成功!")
})
console.log("vue 文件已生成!") })
}).listen(3000);
//这里就是将以上两个部分连接起来就实现了整个过程,先从后请求数据然后再通过本地的node服务将数据添加到模板中最后生成vue文件

birthCode() {
let sessionId = Cookies.get('status');
let this1 = this;
this1.$http({
headers: {
"Authorization": sessionId,
},
method: 'post',
url: this1.GLOBAL.BASE_URL + '/common/function/loadingPage',
params: {
'id': this1.funId
},
})
.then(function(res) {
// axios请求
this1.$http({
method: 'get',
url: 'http://localhost:3000',
params: {
telegram: res.data[0]
}
})
.then(function(response) {
debugger })
.catch(function(error) { })
})
.catch(function(error) {
//
})
}

这些只是自己在项目中的一些运用,也是第一次接触使用ejs模板引擎,如果有不对的地方欢迎大家指正,最后希望能够帮助到大家!

node+ejs模板引擎的应用的更多相关文章

  1. Node - EJS模板应用(node+express+ejs)

    准备工作: 工具:Webstorm 1. 新建一个文件夹为blogs(随意). 一个js文件app.js. 一个文件夹views,文件夹内一个index.ejs文件,文件夹asstes内style.c ...

  2. nodejs-5.1 ejs模板引擎

    ejs官方文档:https://ejs.bootcss.com/ 1.什么是 EJS? "E" 代表 "effective",即[高效]. EJS 是一套简单的 ...

  3. 前端笔记之NodeJS(三)Express&ejs模板引擎&请求识别

    一.Express框架 1.1基本使用 创建http服务器特别麻烦,express框架解决了这个的问题. Express在node界的地位,就相当于jQuery在DOM界的地位.jQuery的核心就是 ...

  4. express搭建web服务器、路由、get、post请求、multer上传文件、EJS模板引擎的使用

    express官网 postman工具下载地址  multer的npm文档地址 express模板引擎怎么使用  地址:http://www.expressjs.com.cn/guide/using- ...

  5. 在express站点中使用ejs模板引擎

    在express站点中使用ejs模板引擎 文/玄魂 目录 在express站点中使用ejs模板引擎 前言 1.1         安装 1.2修改app.js 1.3创建测试页面 前言 使用 vs创建 ...

  6. 理解node的模板引擎

    1.1.3:分析模板引擎    1.什么是模板引擎 模板引擎是一个将页面模板和要显示的数据结合生成HTML页面的工具 可以这么理解,如果说Express中的路由控制方法是MVC中的控制器的话,那么模板 ...

  7. 使用ejs模板引擎

    let express = require('express'); let fs = require('fs'); let ejs = require('ejs'); let app = expres ...

  8. Express框架中如何引用ejs模板引擎

    1.如何在项目中安装ejs模板引擎 在NodeJS指南中利用利用以下命令建立网站的基本结构: express -t ejs microblog 运行这个命令后继续运行 cd microblog &am ...

  9. Swiper+ ejs模板引擎+ iScroll插件知识总结

    一. Swiper swiper是一个应用于移动端的动画插件,原理类似于轮播图 官网 http://www.swiper.com.cn/# html结构 <div class="swi ...

随机推荐

  1. Java bean 转 Map

    Java bean 转 Map 时需要使用Fastjson //方法 一 Map<String, Object> a = (Map<String, Object>)JSON.t ...

  2. NetCore2.0下使用EF CodeFirst创建数据库

    本文所使用的VS版本:VS2017 15.3.0 首先新建一个.net core项目  取名NetCoreTask 使用模型视图控制器方式 新建Model层 在Model层下新建一个user实体类 1 ...

  3. C#、winform、wpf将类控件放进工具箱里

    有时我们需要将vs自带的控件的某一些方法或属性进行一些修改,我们通常会新建一个类来继承它然后对它的方法或属性进行修改,那么我们如何将修改完成的控件类变成可视化控件放到工具箱中便于使用呢? 很简单,只要 ...

  4. git stash pop 冲突,git stash list 中的记录不会自动删除的解决方法

    在使用git stash代码时,经常会碰到有冲突的情况,一旦出现冲突的话,系统会认为你的stash没有结束. 导致的结果是git stash list 中的列表依然存在,实际上代码已经pop出来了. ...

  5. extjs +String2 +Spring 下的分页 以及返回json格式错误的问题

    首先,分页  很简单. 1前台extjs数据源, var shipMgrStore = Ext.create('Ext.data.Store', { model: 'App.ShipMgr.model ...

  6. C# 将文件夹中文件复制到另一个文件夹

    p{ text-align:center; } blockquote > p > span{ text-align:center; font-size: 18px; color: #ff0 ...

  7. Git 教程(三):仓库与分支

    远程仓库 到目前为止,我们已经掌握了如何在Git仓库里对一个文件进行时光穿梭,你再也不用担心文件备份或者丢失的问题了. 可是有用过集中式版本控制系统SVN的童鞋会站出来说,这些功能在SVN里早就有了, ...

  8. 【SparkStreaming学习之三】 SparkStreaming和kafka整合

    环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 jdk1.8 scala-2.10.4(依赖jdk1.8) spark ...

  9. python & mysql 操作(compare_sum_fee)

    [1]源码 工作中涉及的python工具源码实现 费用比较工具源码: #!/usr/bin/python3 #coding = utf-8 import time, sqlite3, datetime ...

  10. 2018-2019-2 网络对抗技术 20165305 Exp2 后门原理与实践

    常用后门工具 一.Windows获得Linux Shell 在Windows下使用ipconfig查看本机IP 使用ncat.exe程序监听本机的5305端口 在Kali环境下,使用nc指令的-e选项 ...