在node中的模版系统

原创 2018年04月17日 15:20:10

一,在使用node 编写应用程序主要就是

   Ecmascript语言:和浏览器不一样,没有BOM,DOM

   核心模块:文件操作的fs,http服务的http,url 路径操作模块,path 路径处理模块,os 操作系统模块

   第三方模块:art-template

   自己写的模块:自己创建的文件

二,commonJS模块规范

 1.什么是模块化

    文件作用域

    通信规则 :加载require  导出

在Node中的javascript还有一个很重要的概念:模块系统

    模块作用域

    使用requirez方法用来加载模块

    使用exports 接口对象来导出模块中的成员  如果一个模块需要直接导出某个成员,    

1.1 加载require

语法:var 自定义变量名称 = require('模块')

两个作用:

            1.执行被加载模块中的代码 2.得到被加载模块中exports导出接口对象

1.2 导出exports

Node 中是模块作用域,默认当前文件所有成员只在当前文件模板有效,对于希望被其他模块访问的成员,我们需要把这些公开的成员挂载到exports 接口对象就可以了,导出多个成员。(必须在对象中)

// 在 Node 中,每个模块内部都有一个自己的 module 对象
// 该 module 对象中,有一个成员叫:exports 也是一个对象
// 也就是说如果你需要对外导出成员,只需要把导出的成员挂载到 module.exports 中

// 我们发现,每次导出接口成员的时候都通过 module.exports.xxx = xxx 的方式很麻烦,点儿的太多了
// 所以,Node 为了简化你的操作,专门提供了一个变量:exports 等于 module.exports

// var module = {
//   exports: {
//     foo: 'bar',
//     add: function
//   }
// }

// 也就是说在模块中还有这么一句代码
// var exports = module.exports

// module.exports.foo = 'bar'

// module.exports.add = function (x, y) {
//   return x + y
// }

// 两者一致,那就说明,我可以使用任意一方来导出内部成员
// console.log(exports === module.exports)

// exports.foo = 'bar'
// module.exports.add = function (x, y) {
//   return x + y
// }

// 当一个模块需要导出单个成员的时候
// 直接给 exports 赋值是不管用的

// exports.a = 123

// exports = {}
// exports.foo = 'bar'

// module.exports.b = 456

// 给 exports 赋值会断开和 module.exports 之间的引用
// 同理,给 module.exports 重新赋值也会断开

// 这里导致 exports !== module.exports
// module.exports = {
//   foo: 'bar'
// }

// // 但是这里又重新建立两者的引用关系
// exports = module.exports

// exports.foo = 'hello'

// {foo: bar}
exports.foo = 'bar'


// {foo: bar, a: 123}
module.exports.a = 123

// exports !== module.exports
// 最终 return 的是 module.exports
// 所以无论你 exports 中的成员是什么都没用
exports = {
  a: 456
}

// {foo: 'haha', a: 123}
module.exports.foo = 'haha'

// 没关系,混淆你的
exports.c = 456

// 重新建立了和 module.exports 之间的引用关系了
exports = module.exports

// 由于在上面建立了引用关系,所以这里是生效的
// {foo: 'haha', a: 789}
exports.a = 789

// 在这里都全部推翻了,重新赋值
// 最终得到的是 Function
module.exports = function () {
  console.log('hello')
}

// 真正去使用的时候:
//    导出多个成员:exports.xxx = xxx
//    导出多个成员也可以:module.exports = {
//                        }
//    导出单个成员:module.exports


// 谁来 require 我,谁就得到 module.exports
// 默认在代码的最后有一句:
// 一定要记住,最后 return 的是 module.exports
// 不是 exports
// 所以你给 exports 重新赋值不管用,
// return module.exports
  exports 和 module.exports 的区别
  + 每个模块中都有一个 module 对象
  + module 对象中有一个 exports 对象
  + 我们可以把需要导出的成员都挂载到 module.exports 接口对象中
  + 也就是:`moudle.exports.xxx = xxx` 的方式
  + 但是每次都 `moudle.exports.xxx = xxx` 很麻烦,点儿的太多了
  + 所以 Node 为了你方便,同时在每一个模块中都提供了一个成员叫:`exports`
  + `exports === module.exports` 结果为  `true`s
  + 所以对于:`moudle.exports.xxx = xxx` 的方式 完全可以:`expots.xxx = xxx`
  + 当一个模块需要导出单个成员的时候,这个时候必须使用:`module.exports = xxx` 的方式
  + 不要使用 `exports = xxx` 不管用
  + 因为每个模块最终向外 `return` 的是 `module.exports`
  + 而 `exports` 只是 `module.exports` 的一个引用
  + 所以即便你为 `exports = xx` 重新赋值,也不会影响 `module.exports`
  + 但是有一种赋值方式比较特殊:`exports = module.exports` 这个用来重新建立引用关系的
  + 之所以让大家明白这个道理,是希望可以更灵活的去用它
- Node 是一个比肩 Java、PHP 的一个平台
  + JavaScript 既能写前端也能写服务端 


 


    



nodejs ejs前端模板学习

前言: 如果所有的前端页面都需要自己拼装成HTML字符串之后打印给前台,那么对开发人员来说无疑是很大的工作量,因此,就需要使用前端模板,把关注的重心集中到前端的数据上,类似于PHP,JSP等web动...
  • hbiao68
  • hbiao68
  • 2016-10-21 15:20:14
  • 1650

【Node.js基础篇】(六)实现如同jsp标签的HTML模板

一、概述在上一篇中,我们已经可以使用mime类型模块以及文件传输模块为客户端返回任何类型的文件,但目前能返回的只有静态的HTML,css等文件,而jsp等服务器端语言却可以通过标签来实现java的扩张...
  • zgljl2012
  • zgljl2012
  • 2015-04-01 14:42:10
  • 2984

drupal7 node.tpl.php文件 及其所用到的变量

转自:http://drupalchina.cn/node/1581 这个模板文件定义个体的节点如何在站点上显示,默认的node.tpl.php文件在目录modules/node中 ...
  • wang350
  • wang350
  • 2013-03-25 18:11:53
  • 1011

nodejs中的ejs模板学习

02.ejs。这是被include的文件 console.log("aaaa") 01.ejs  模板文件ejs  注意:     ...
  • dongmelon
  • dongmelon
  • 2017-05-17 16:39:47
  • 1864

Node.js模板引擎: Jade入门

Jade是Node.js的一个模板引擎,它借鉴了Haml的很多地方,所以语法上和Haml比较相近。并且,Jade也支持空格。1、标签在Jade里,一行开头的任何文本都被默认解释成HTML标签。并且你只...
  • u014695532
  • u014695532
  • 2016-04-05 15:59:53
  • 2701

Node.js模板引擎的深入探讨

每次当我想用 node.js 来写一个 web 相关项目的时候,我总是会陷入无比的纠结,原因是 JavaScript 生态圈里的模板引擎实在太多了,但那么多却实在找不出一个接近完美的,所谓完美的概念就...
  • xiaohubeiplus
  • xiaohubeiplus
  • 2016-04-17 21:02:45
  • 5544

[Node][Agenda]Node Agenda 中文文档 定时任务调度系统[基础篇]

Agenda简介Agenda是一个定时任务管理模块,它将node中的定时任务存储在数据库中(官方文档推荐使用mongoDB),通过事件回调与监听实现定时任务调度。使用步骤概述总的来说分4步: 初始化(...
  • github_36749622
  • github_36749622
  • 2017-08-02 19:28:37
  • 482

初窥nodejs(五) ——模板引擎(Jade)

目前nodejs的模板引擎有很多,各自有各自的优缺点。在本篇博客中,我会初步介绍其中的两个主流模板引擎之一: Jade。...
  • Nate__River
  • Nate__River
  • 2017-09-20 17:40:26
  • 360

Node.js的学习日记 简单的登录系统 node.js的简单登录系统

登录系统我做的是有两个html的文件,一个是注册,一个是登陆,通过对端口地址的url的解析的不同,让两个文件不同的切换,并把注册的信息保存起来,登录的时候进行对比,如果一直方可登录。 1.html代...
  • zhanghuiqi205
  • zhanghuiqi205
  • 2016-12-27 19:00:13
  • 648

Node.js、Sublime text3、HTML5模板搭建基本简单静态web网站

express/express-generator/express -V/新建web项目/测试 HTML5模板/下载/安装/public Sublime text3引入项目/sidebarenchan...
  • NEET007
  • NEET007
  • 2016-06-14 20:08:58
  • 1209
收藏助手
不良信息举报
您举报文章:在node中的模版系统
举报原因:
原因补充:

(最多只允许输入30个字)