NodeJs:用 nodejs + edge + ejs + c#,打造属于自己的代码生成器
2013-05-15 19:39
525 查看
NodeJs:用 nodejs + edge + ejs + c#,打造属于自己的代码生成器(下篇)
背景
最近有一个任务,为第三放系统的需要公开WCF服务接口,需求就是:根据需要访问的数据(表)和访问使用的协议自动生成WCF项目。本来打算用T4的,因为最近刚好开始学习Node,就用Node实现了一个简答的代码生成器工具。上篇地址:/article/4736828.html。
因为如何实现已经在上篇文章做了介绍,这篇文章就介绍一下如何使用。
如何使用?
第一步:环境要求
Node + .Net4.5 + 我的项目第二步:文件夹结构
![](http://images.cnitblog.com/blog/492619/201305/15165909-bb09188ed6fc43499ddabeec79a228e7.jpg)
test_database:存放测试数据库(可以自定义)。
templates:存放代码模板(不能自定义)。
outputs:存放生成后的代码(可以自定义)。
test.js:入口程序(名称可以自定义,和templates的相对路径关系不能变)。
第三步:建立模板
![](http://images.cnitblog.com/blog/492619/201305/15170226-818dcef9ba704a40bb6018014df2f480.jpg)
Entity.ejs
注意:outs.outputFile可以是一个函数或字符串路径,它指示了输出的文件路径。
1 <% include includes/header %> 2 using System.Runtime.Serialization; 3 <% 4 outs.outputFile = function () { 5 return util.format('./outputs/%s.cs', table.name); 6 }; 7 %> 8 9 namespace <%= namespace %> 10 { 11 [DataContract] 12 public class <%= table.name %> 13 { 14 <% 15 _.each(table.columns, function(column) { 16 %> 17 [DataMember] 18 public <%= column.dataType.netDataType %><%= column.nullableIndicator %> <%= column.name %> { get; set; } 19 <% 20 }); 21 %> 22 } 23 }
第四步:执行模板
1 var util = require('util'); 2 var _ = require('underscore'); 3 4 var SchemaReader = require('database_schem_reader'); 5 var Generator = require('code_generator'); 6 7 var schemaReader = new SchemaReader( 8 'System.Data.SqlClient', 9 'Data Source=(LocalDB)\\v11.0;AttachDbFilename=E:\\node\\happy_node\\demo\\code_generator\\test_database\\Test.mdf;Integrated Security=True;Connect Timeout=30' 10 ); 11 12 var namespace = 'Test'; 13 14 schemaReader.readAll(function (error, schema) { 15 _.each(schema.tables, function (table) { 16 var generator = new Generator(); 17 18 generator.generateDirectoryToFiles({ 19 directory: './templates/tables', 20 table: table, 21 namespace: namespace 22 }); 23 24 console.log(table.name + ' generate success!'); 25 }); 26 });
第五步:查看结果
![](http://images.cnitblog.com/blog/492619/201305/15170643-e8de9b7c2d1c4545bdd2e55e1dfed9b5.jpg)
Table.cs
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 using System.Runtime.Serialization; 7 8 9 namespace Test 10 { 11 [DataContract] 12 public class Table 13 { 14 15 [DataMember] 16 public System.Guid Id { get; set; } 17 18 [DataMember] 19 public System.String Name { get; set; } 20 21 } 22 }
备注
整个模板工具实现了2个类和4个API方法,代码不超过200行,有兴趣的朋友自己下载,DIY吧。我个人使用的感觉是比T4更灵活,当然不能替换T4,在项目中,两种工具我都会用。
相关文章推荐
- NodeJs:用 nodejs + edge + ejs + c#,打造属于自己的代码生成器
- NodeJs:用 nodejs + edge + ejs + c#,打造属于自己的代码生成器
- NodeJs:用 nodejs + edge + ejs + c#,打造属于自己的代码生成器(下篇)
- 用NodeJS打造多人在线聊天室(NodeJS & SocketIO & Express & EJS & MongoDB & Gulp)
- [NodeJS]Node.js 打造实时多人游戏框架
- Nodejs 开发指南 Nodejs+Express+ejs 开发microblog开发心得
- NodeJS - NPM - Edge - Connect NodeJs and .Net
- nodejs + edge + ejs + c#
- 安装node-v4.5.0-x86.msi时提示node.js setup wizard ended prematurely Win7安装nodejs失败解决方法
- Node.js + Web Socket 打造即时聊天程序
- 前端工程师使用node.js打造日记社区教程之三
- ICE-NODEJS NODE.JS使用ICE进行分布式通信-环境搭建
- 使用node.js和bot framework来打造自己的查询机器人
- Ubuntu 16.04 64位 搭建 node.js NodeJS 环境
- Node.js项目中调用JavaScript的EJS模板库的方法
- NodeJS - nodejs addon用法
- [NodeJS]使用Node.js写一个简单的在线聊天室
- 【深入浅出Node.js系列十五】Nodejs实现websocket的4种方式
- 【基于node.js+express的web开发备忘】--nodejs v0.11.13 + express v4.2.0+mongodb v2.0.6