发布于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/
来源:前端黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 前端黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-3
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!