Node.js-01-读写文件与模板引擎

1、node中常用的核心模块

  • fs :文件操作模块、
    =》 即 var fs = require(‘fs’);
  • http: 服务构建模块,
    =》 即 var http = require(‘http’);
  • path:路径操作模块,
    =》 即 var path = require(‘path’);
  • os:操作系统信息模块
    =》 即 var os = require(‘os’);

使用 require 方法,来加载核心模块


2、搭建简单的服务器

// 1、加载 http 核心模块
var http = require('http');

// 2、使用 http.createServer() 方法创建一个 web 服务器
var server = http.createServer();

// 3、注册 request 请求事件,当客户端请求过来,
//    就会自动触发服务器的 request 请求事件,然后执行第二参数:回调处理函数
server.on('request',function( request,response ){

    //  如果地址栏是 http://127.0.0.1:3000  request.url 就为 /
    //  如果地址栏是 http://127.0.0.1:3000/a  request.url 就为 /a
   

// 可以使用 node 很轻松的构建一个服务器
// 在 node 中专门提供了一个核心模块:http
// http 这个模块的职责就是帮我们创建编写服务器的

// 1、加载 http 核心模块
var http = require('http');


// 2、使用 http.createServer() 方法创建一个 web 服务器、返回一个 Server 实例
var server = http.createServer();

// 3、注册 request 请求事件
server.on('request',function( request,response ){
    console.log('客户端的请求路径:' + request.url );
    // response 对象有一个 write() 方法,可以用来给客户端发送响应数据
    // write 可以使用多次,但最终要以 end() 方法来结束响应,否则客户端会一直等待
    response.write('hello');
    // 服务器告诉客户端,结束响应,可以呈递给用户了
    response.end();
})

// 3000 代表端口号
server.listen(3000,function(){
    console.log('服务器启动成功,可以通过 http://127.0.0.1:3000/来进行访问');
})
// ctrl+c 关闭服务器

服务器:对数据提供相关服务
=》客户端发请求给服务器
=》服务器接收请求
=》服务器处理请求
=》服务器把处理结果返回给客户端
关于 request.url
=》 如果地址栏是 http://127.0.0.1:3000 request.url 就为 /
=》 如果地址栏是 http://127.0.0.1:3000/a request.url 就为 /a
=》 如果地址栏是 http://127.0.0.1:3000/a/foo request.url 就为 /a/foo


3、读取文件( .txt、.html)的区别

  • 读取 .txt 文本文件
// 1、先加载核心模块 fs
var fs = require('fs');
// 2、读取文件
fs.readFile('./README.txt',function( error,data){
  if(error){
      console.log('读取文件失败');
  }else{
       console.log(data.toString());
  }
});

关于 readFile方法:
第一个参数就是待读取的文件的路径、
第二个参数是一个回调函数
=》 若读取成功,data 代表文件的内容,error 是 null
=》 若读取失败,data 是 undefined,error 是错误对象


  • 读取 .html 文件
server.on('request',function(request,response){

    var url = request.url;

    // 在HTTP协议中,Content-Type 就是用来告诉浏览器,服务器发送给他的数据的类型
    if(url === '/plain'){
        // text/plain 是普通文本
         response.setHeader('Content-Type','text/plain;charset=UTF-8');
         response.end('hello,你好。(注意:如果不加上一句,会出现中文乱码问题)');
    }else if(url === '/html'){
        // text/html 表示:让浏览器解析 html 文本
        response.setHeader('Content-Type','text/html;charset=UTF-8');
        response.end('

hello,world点我

'
); } });

通过响应对象 response 的setHeader() 方法中设置 Content-Type,来正确读取不同格式的我呢间


4、写文件


var fs = require('fs');
fs.writeFile('./demo.txt','你好',function(error){
    console.log('文件写入成功');
})

关于fs 对象的writeFile()方法:
=》 第一个参数:文件路径
=》第二个参数:想写入文件的文件内容
=》 第三个参数:回调函数
error
=》若写入成功,error 是 null
=》若写入失败,error 是错误对象


5、模板引擎

  • 模板引擎安装:
npm install art-template     // 在终端运行
  • 安装成功之后,会出现 node-modules 文件夹。
  • 模板引擎使用的两种场景
    =》在 .html 文件中使用
<body>
    
    <script src="./node_modules/art-template/lib/template-web.js">script>
    
    <script type="text/template" id="tpl">
        姓名: {{ name }}
        年龄: {{ age }} 岁了
        省份: {{ province }} 爱好:{{ each hobbies }} {{ $value }} {{ /each }}
    script>
   
   <script>
       var ret = template('tpl',{
           name:'Jack',
           age:18,
           province:'北京市',
           hobbies:[
               'sing',
               'dancing',
               'swimming',
           ]
       })
       console.log(ret);
  script>
body> 

模板引擎只关心 {{ }} 内部的内容
{{ }} 为插值表达式
在模板引擎中,除了{{ }} 以外的其他内容,全被当成普通文本对待

=》在 .js文件中使用

var template = require('art-template');
// 模板引擎的 render 方法第一个参数,应是字符串类型
var ret = template.render('hello {{ name }}',{
    name:'Jack'
})
console.log(ret);  // hello Jack

6、使用模板引擎加载 html 页面的简例
.js 文件

var template = require('art-template');
var fs = require('fs');
fs.readFile('../demo.html',function(error,data){
    if(error){
        console.log('读取文件失败');
    }
    var result = template.render(data.toString(),{
        name:'Jack',
        age:18,
        province:'北京市',
        hobbies:[
            'sing',
            'dancing',
            'swimming',
        ]
    })
    // result 即为插值表达式 {{ name }}、{{ age }}等被替换后的结果
    console.log(result);
})

从 demo.html 中读取过来的 data 是二进制类型
而模板引擎的 render() 方法接收的第一个参数应该是字符串
故要使用 data.toString() 进行类型转换

demo.html文件


<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Documenttitle>
head>
<body>
    <p>你好p>
    <p>
            大家好,我叫: {{ name }}
            我今年 {{ age }} 岁了
            我来自 {{ province }} 
            我喜欢:{{ each hobbies }} {{ $value }} {{ /each }}
    p>
body>
html>

效果:
Node.js-01-读写文件与模板引擎_第1张图片
6、node中的模块化

  • 每一个模块为一个 .js 文件。
  • 每一个模块中定义的全局变量或函数的作用范围也被限定在这个模块之内,只有使用 exports 对象才能将其传递到外部
exports.printFoo = function() { 
	return "foo" 
}
  • 在引用模块时,需要使用 require 函数,例如,将上面这个具有 printFoo 函数的模块文件保存为 foo.js 文件之后,可以通过以下代码来访问 printFoo 函数
// 通过 foo.js 文件路径加载 foo.js 模块
var foo = require('./fo.js');

// 访问 foo.js 模块内的 printFoo 函数
conosle.log(foo.printFoo());

你可能感兴趣的:(Node.js)