node中模板引擎、模块导出、package.json简介

在node.js中使用引擎模板:

art-template不仅在浏览器可以使用,也可以在node中使用,并且模板引擎起早诞生于服务器领域,在node中使用模板引擎:

1.安装:在一个文件目录下执行命令:npm install art-template

2.在需要使用的文件模块中使用require方法加载:art-template即可。

3.查阅文档,使用引擎模板API,如:

	<!--简单原理,下面是tpl.html模板:-->
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>{{ title }}</title>
    </head>
    <body>
        <p>大家好,我叫:{{ name }}</p>
        <p>我今年 {{ age }} 岁了</p>
        <h1>我来自 {{ province }}</h1>
        <p>我喜欢:{{each hobbies}} {{ $value }} {{/each}}</p>
    </body>
    </html>
    <!--将上面的模板使用下面的值渲染:-->
    var template = require('art-template');
    var fs = require('fs');
    fs.readFile('./tpl.html', function(error, data) {
        if (error) {
            return console.log('文件读取失败');
        };
        var ret = template.render(data.toString(), { //.render()渲染模板:第一参数表示定义好的模板(字符串型);第二个参数为对象,表示模板中变量的值
            name: 'Jack',
            age: 18,
            province: '深圳市',
            hobbies: [
                '打游戏',
                '听歌',
                '睡觉'
            ],
            title: '个人信息'
        });
        console.log(ret); //将渲染的数据打印出来,这里可以通过http模块响应给浏览器等
    });
    
    
    
    <!--下面案例实现将数据渲染并响应给浏览器:-->
    var http = require('http');
    var fs = require('fs');
    var server = http.createServer();
    var urldir = 'E:/web前端/web前端笔记/11.node/11.像Apache一样打印目录结构/www';
    server.on('request', function(request, response) {
        fs.readFile('./template.html', function(erro, data) {
            if (erro) {
                return response.end('404 Not Found.');
            };
            fs.readdir(urldir, function(error, files) {
                if (error) {
                    return response.end('Can not find www dir.');
                };
                var content = '';
                files.forEach(function(item) { //遍历目录结构files,并动态的把数组的每一项拼接到content中,content在这里就是模块
                    content += `
                                <tr>
                                  <td><a href="">${item}/</a></td>
                                </tr>
                              `
                });
                data = data.toString(); //二进制数据转换为字符串
                data = data.replace('str', content); //遍历后的content数据替换模板中的str,在这里str就是html页面中的一个字符,使用替换的方式将上面的数据替换到html页面中
                response.end(data); //响应给浏览器,data数据实际就是字符串
            });
        });
    });
    
    server.listen(4000, function() {
        console.log('running...')
    });

exports和module.exports:

1.在node中每个模块中默认有一个module,该module中有一个成员:exports ,代码底层最后有一句:return module.exports,如:

	 var module = {

      exports:{}

    };

    return module.exports;

2.exports 是module.exports的一个引用,可以简化书写,在模块中 exports === module.exports,但是导出一个成员的时候是使用:module.exports = ‘新的值’,而不是使用exports = ‘新的值’,因为exports只是module.exports的一个引用,模块底层最终: return module.exports

3.重新建立引用关系:exports = module.exports,重新建立引用关系后,exports和module.exports的指向相同。

在一个node.js文件中载入另一node.js文件并使用其中的变量:

在node中没有全局作用域,只有模块作用域,超出作用域无效,外部访问不到内部,内部也访问不到外部;如:在a.js中定义的str变量默认是不能在被载入a.js的b.js文件中访问到。

有的时候使用一个模块的目的不仅是执行这个模块这么简单,还需要拿到里面的成员,此时可以使用require的对象:export.对象名即可导出某模块,这样就能访问到另一个模块中的变量了,如:

	// 默认模块间的变量是不能互相访问的:
    const b = require('./b.js'); //b.js文件中定义了变量str;(在被载入时后缀名是可以省略的,但是在自定义模块中路径需要注意,即使在同文件夹中也要严格,如这里需要加./)
    // console.log(str); //ReferenceError: str is not defined
    // const numstr = '123'; //在b文件中访问numstr返回:numstr is not defined
    
    
    // 将另一个模块导入来访问另一个模块中的变量:
    console.log(b.str); //在另一个模块中使用:exports.名称 = 变量名 来导出一个变量;在本文件中使用载入模块的变量.名称即可访问到另一模块中的变量
    console.log(b.name);

package.json文件:

用来描述一个项目中所引用的第三方包,当一个项目被下载下来后。如果是将包定义在了package.json文件,那么需要npm install先下载第三方依赖。这样可以节约空间,其指定包的配置为dependencies;如果一个包需要配置到package.json中,那么安装的时候需要在后面加–save,如:

	 {
      "name": "express-demo",
      "version": "1.0.0",
      "description": "",
      "main": "index.js",
      "scripts": {
        "test": "echo \"Error: no test specified\" && exit 1"
      },
      "keywords": [],
      "author": "",
      "license": "ISC",
      "dependencies": {
        "express": "^4.16.2"
      }
    }
    
    属性说明:
    name - 包名
    version - 包的版本号
    description - 包的描述
    homepage - 包的官网 url
    author - 包的作者姓名
    contributors - 包的其他贡献者姓名
    dependencies - 依赖包列表。如果依赖包没有安装,npm 会自动将依赖包安装在 node_module 目录下
    repository - 包代码存放的地方的类型,可以是 git 或 svn,git 可在 Github 上
    main - main 字段指定了程序的主入口文件,require('moduleName') 就会加载这个文件。这个字段的默认值是模块根目录下面的 index.js
    keywords - 关键字
    手动生成package.json文件:npm init 

提示:本文图片等素材来源于网络,若有侵权,请发邮件至邮箱:810665436@qq.com联系笔者删除。
笔者:苦海

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

苦海123

快乐每一天!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值