本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长


+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

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

发布于2021-05-30 11:21     阅读(1465)     评论(0)     点赞(8)     收藏(3)


在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联系笔者删除。
笔者:苦海




所属网站分类: 技术文章 > 博客

作者:Jjxj

链接:http://www.qianduanheidong.com/blog/article/115953/6fbf406f5c76458b00b1/

来源:前端黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

8 0
收藏该文
已收藏

评论内容:(最多支持255个字符)