首页 > 编程语言 >nodejs.01

nodejs.01

时间:2022-11-18 20:23:11浏览次数:77  
标签:return log err server console nodejs.01 const

fs模块

导入 fs 模块,来操作文件

const fs = require('fs');

调用fs.readFile()方法读取文件

参数1: 读取文件存放路径
参数2: 读取文件时候采用的编码格式,一般默认utf-8
参数3: 回调函数,拿到读取失败和成功的结果 err dataStr

const fs = require('fs');
fs.readFile('./files/1.txt','utf8', function (err, dataStr) {
    //  打印失败的结果
    //  如果读取成功,则 err 的值为 null
    //  如果读取失败,则 err 的值为错误对象,dataStr的值为 undefined
    console.log(err);
    console.log('-----------------');
    //  打印成功的结果
    console.log(dataStr);
})

判断文件是否读取成功

const fs = require('fs');
fs.readFile('./files/1.txt','utf8', function (err, dataStr) {
    if (err) {
        return console.log('读取文件失败!' + err.message);
    } else {
        console.log('读取文件成功!' + dataStr);
    }
})

调用fs.writeFile()方法,写入文件内容

// 参数1: 表示文件存放路径
// 参数2: 表示要写入的内容
// 参数3: 回调函数
fs.writeFile()方法只能用来创建文件,不能创建路径
重复调用fs.writeFile()方法写入同一个文件,新写入的内容会覆盖之前的旧内容


fs.writeFile('./files/2.txt', 'haha', function (err) {
    //  如果文件写入成功,则 err 的值等于 null
    //  如果文件写入失败,则 err 的值等于一个 错误对象
    // console.log(err);
    //判断文件是否写入成功
    if (err) {
        return console.log('文件写入失败!' + err.message);
    } else {
        console.log('文件写入成功!');
    }
});

__dirname

出现路径拼接错误问题是因为提供了 ./ 或 ../ 开头的相对路径
解决方法:可以直接提供一个完整的文件存放路径(绝对路径),但是要注意" \ "需要转义
绝对路径移植性非常差,不利于维护

fs.readFile('D:\\Download\\Microsoft VS Code\\pro\\nodejs\\files\\1.txt','utf8', function (err, dataStr) {
    if (err) {
        return console.log('读取文件失败!' + err.message);
    } else {
        console.log('读取文件成功!' + dataStr);
    }
})

__dirname 表示当前文件所处的目录

fs.readFile(__dirname + '/files/1.txt','utf8', function (err, dataStr) {
    if (err) {
        return console.log('读取文件失败!' + err.message);
    } else {
        console.log('读取文件成功!' + dataStr);
    }
})

path模块

导入 path 模块

const path = require('path');

path.join() 方法

路径使用path.join()方法拼接

fs.readFile(path.join(__dirname, './files/1.txt'),'utf8', function (err, dataStr) {
    if (err) {
        return console.log('读取文件失败!' + err.message);
    } else {
        console.log('读取文件成功!' + dataStr);
    }
}) 

path.basename()

path.basename()可以从文件路径中获取文件的名称部分

const fpath = 'D:\\Download\\Microsoft VS Code\\pro\\nodejs\\files\\成绩-ok.txt';
var fullName = path.basename(fpath);
console.log(fullName);
//输出: 成绩-ok.txt
var nameWithoutExt = path.basename(fpath,'.txt');
console.log(nameWithoutExt);
//输出: 成绩-ok

path.extname()

path.extname() 获取文件扩展名

const fpath = 'D:\\Download\\Microsoft VS Code\\pro\\nodejs\\files\\成绩-ok.txt';
const fext = path.extname(fpath);
console.log(fext); 
//输出:.txt

创建 web 服务器的基本操作

1. 导入 http 模块

const path = require('path');

2.创建 web 服务器实例

const server = http.createServer();

3.为服务器实例绑定 request 事件,监听客户端的请求

server.on('request', function (req, res) {
    console.log('Someone visit our server.');
});

4.启动服务器

server.listen(8080, function () {
    console.log('server runing at http://127.0.0.1:8080');
});

了解 req请求对象

const server = http.createServer();
// req 是请求对象,包含了与客户端相关的数据和属性
server.on('request',  (req) => {
    // req.url 是客户端请求的 URL 地址
    const url = req.url;
    // req.method 是客户端请求的 method 类型
    const method = req.method;
    const str = `your request url is ${ url },and request method is ${ method }`
    console.log(str);
});
server.listen(8080, () => {
    console.log('server runing at http://127.0.0.1:8080');
});

res 响应对象 res.end()

const server = http.createServer();
// req 是请求对象,包含了与客户端相关的数据和属性
server.on('request',  (req, res) => {
    // req.url 是客户端请求的 URL 地址
    const url = req.url;
    // req.method 是客户端请求的 method 类型
    const method = req.method;
    const str = `your request url is ${ url },and request method is ${ method }`
    console.log(str);
    // 调用 res.end() 方法,向客户端响应一些内容
    res.end(str);
});
server.listen(8080, () => {
    console.log('server runing at http://127.0.0.1:8080');
});

解决中文乱码问题

// 为防止中文显示乱码问题,需要设置响应头 Content-Type 的值为 text/html; charset = utf-8
    res.setHeader('Content-Type','text/html; charset=utf-8');
    ```
```js
const server = http.createServer();
server.on('request',  (req, res) => {
    // req.url 是客户端请求的 URL 地址
    const url = req.url;
    // req.method 是客户端请求的 method 类型
    const method = req.method;
    const str = `你请求的 url 地址是 ${ url }, 请求的 method 类型是 ${ method }`;
    // 为防止中文显示乱码问题,需要设置响应头 Content-Type 的值为 text/html; charset = utf-8
    res.setHeader('Content-Type','text/html; charset=utf-8');
    // 调用 res.end() 方法,向客户端响应一些内容
    res.end(str);
});
server.listen(8080, () => {
    console.log('server runing at http://127.0.0.1:8080');
}); 

根据不同的 url 响应不同的 html 内容

const server = http.createServer();
server.on('request',  (req, res) => {
    //1.    获取请求的 url 地址
    const url = req.url;
    //2.    设置默认的响应内容为 404 Not found
    let content = '<h1>404 Not found</h1>';
    //3.    判断用户请求的是否为 / 或 /index.html 首页
    //4.    判断用户请求的是否为 /about.html 关于页面
    if (url === '/' || url === '/index.html') {
        content = '<h1>首页</h1>'
    }else if (url === '/about.html') {
        content = '<h1>关于页面</h1>'
    };
    //5.    设置 Content-Type 响应头,防止中文乱码
    res.setHeader('Content-Type','text/html; charset=utf-8');
    //6.    使用 res.end() 把内容响应给客户端
    res.end(content);
});
server.listen(8080, () => {
    console.log('server runing at http://127.0.0.1:8080');
});

module.exports

module.exports 对象,将模块内的成员共享出去,供外界使用

外界用 require() 方法导入自定义模块时,得到的就是 module.exports 所指向的对象
在一个自定义模块中,默认情况下,moudule.expots = {}

const m = require('./11.自定义模块');
console.log(m);
//输出为:nickname: '张三',
//sayHi() {Object Function}

11.自定义模块.js

// 向 module.exports 对象上挂载 username 属性
module.exports.username = 'zs';

//向 module.exports 对象上挂载 sayHello 方法
module.exports.sayHello = function () {
    console.log('hello!');
}
const age = 20;
// 
module.exports.age = age;
//让 module.exports 指向一个全新对象
module.exports = {
    nickname: '张三',
    sayHi() {
        console.log('Hi!');
    }
}

exports 对象

exports 对象 ,默认情况下,exports 和 module.exports 指向同一个对象
最终共享结果,以module.exports 指向对象为准

格式化时间

格式化时间的传统做法

1.创建格式化时间的自定义模块

2.定义格式化时间的方法

function dateFormat(dtStr) {
    const dt = new Date(dtStr);
    const y = dt.getFullYear();
    const m = padZero(dt.getMonth() + 1);
    const d = padZero(dt.getDate());

    const hh = padZero(dt.getHours());
    const mm = padZero(dt.getMinutes());
    const ss = padZero(dt.getSeconds());

    return `${y}-${m}-${d} ${hh}:${mm}:${ss}`
}

3.创建补零函数

function padZero(n) {
    return n > 9 ? n : '0' + n;
}

4.从自定义模块中导出格式化时间的函数

module.exports = {
    dateFormat
}

5.导入格式化时间的自定义模块

const TIME = require('./dateFormat.js');

//6.    调用格式化时间的函数
const dt = new Date();
console.log(dt);
const newDT = TIME.dateFormat(dt);
console.log(newDT);

dateFormat.js

//定义格式化时间的方法
function dateFormat(dtStr) {
    const dt = new Date(dtStr);

    const y = dt.getFullYear();
    const m = padZero(dt.getMonth() + 1);
    const d = padZero(dt.getDate());

    const hh = padZero(dt.getHours());
    const mm = padZero(dt.getMinutes());
    const ss = padZero(dt.getSeconds());

    return `${y}-${m}-${d} ${hh}:${mm}:${ss}`
}
//3.    创建补零函数
function padZero(n) {
    return n > 9 ? n : '0' + n;
}
//     导出格式化时间的函数
module.exports = {
    dateFormat
}

格式化时间的高级做法

格式化时间的高级做法 moment 包 官方 API 文档 https://www.npmjs.com/

1.使用 npm 包管理工具,在项目中安装格式化时间的包 moment

npm i moment

2.使用 require() 导入包

const moment = require('moment');
//3.    参考 moment 的官方 API 文档对时间进行格式化
const dt = moment().format('YYYY-MM-DD HH:mm:ss');
console.log(dt);

HTML转义

1.定义HTML转义方法

function htmlEscape (htmlStr) {
    return htmlStr.replace(/<|>|"|&/g, (macth) => {
        switch (macth) {
            case '<':
                return '<'
            case '>':
                return '>'
            case '"':
                return '"'
            case '&':
                return '&'    
        }
    })
}

2.定义还原 html 字符串的函数

function htmlUnEscape(str) {
    return str.replace(/<|>|"|&/g, (macth) => {
        switch (macth) {
            case '<':
                return '<'
            case '>':
                return '>'
            case '"':
                return '"'
            case '&':
                return '&'  
        }
    })
}

3.向外共享成员

module.exports = {
    htmlEscape,
    htmlUnEscape
}

4.导出模块,使用

const itheima = require('./itheima-tools');
const htmlStr = '`<h1 title="abc">`这是h1标签`<span>`123 `</h1>`'
const str = itheima.htmlEscape(htmlStr);
console.log(str);
console.log("-----------------------------");
// 还原 html 字符串
const str2 = itheima.htmlUnEscape(str);
console.log(str2);
console.log("-------------------------------");

js 文件

//  定义HTML转义方法
function htmlEscape (htmlStr) {
    return htmlStr.replace(/<|>|"|&/g, (macth) => {
        switch (macth) {
            case '<':
                return '<'
            case '>':
                return '>'
            case '"':
                return '"'
            case '&':
                return '&'      
        }
    })
}
// 定义还原 html 字符串的函数
function htmlUnEscape(str) {
    return str.replace(/<|>|"|&/g, (macth) => {
        switch (macth) {
            case '<':
                return '<'
            case '>':
                return '>'
            case '"':
                return '"'
            case '&':
                return '&'      
        }
    })
}
module.exports = {
    htmlEscape,
    htmlUnEscape
}

开发属于自己的包 (itheima-tools)

包必须有 index.js 文件 package.json README.md

将不同功能进行模块化拆分,放入src文件夹中,存入不同 js 文件
然后在 index.js 中导入模块,得到需要向外共享的方法

在 index.js 中,使用 module.exports 把对应的方法共享出去

Express 快速创建 Web 服务器

使用 express 创建最基本的的服务器

先安装express包

npm i [email protected]
//1.    导入 express
const express = require('express');
//2.    创建 web 服务器
const app = express();
//3.    启动 Web 服务器
app.listen(80, () => {
    console.log("express server running at http://127.0.0.1");
});

标签:return,log,err,server,console,nodejs.01,const
From: https://www.cnblogs.com/LuBingBing/p/16904795.html

相关文章