Node.js-模块化/包/express路由

发布时间:2022-06-08 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了Node.js-模块化/包/express路由脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

模块化

提高代码的复用性,可维护性,实现按需加载
 
Node.js根据模块的来不同,分为三类
内置模块:fs,path,http
自定义模块:用户自己创建的
第三方模块:需要下载的
 
加载模块
使用require()
注:加载自定义模块,需要注意路径问题
 
模块作用域:只能在该模块使用定义在该模块中的变量
好处:止全局变量污染的问题
 
向外共享模块作用域中的成员
设置一个自定义模块
module.exports.username = 'zs';
module.exports.sayhello = function () {
    console.LOG('hello');
}

设置测试

//在外界使用require倒入一个自定义模块的时候,得到的成员便是module.exports所指向的对象
const m = require('/Users/shuchenhao/Desktop/web前端学习/Node/自定义模块.js');
console.log(m);
终端显示结果
shuchenhao@shuchenhaodeMacBook-air Node % node test1.js
{ username: 'zs', sayhello: [Function (anonymous)] }

共享成员的注意点

使用require()方法导入模块时,导入的结果,永远以module.exports指向的对象为准。
module.exports.username = 'zs';
module.exports.sayhello = function () {
    console.log('hello');
}
module.exports = {
    nickname: '小黑',
    sayhi() {
        console.log('hi');
    }
}
终端
shuchenhao@shuchenhaodeMacBook-Air Node % node test1.js
{ nickname: '小黑', sayhi: [Function: sayhi] }
 
exports和module.exports指向同一个对象,最终共享的结果永远以module.exports指向的对象为
 

第三方模块也称为包
从https://www.npmjs.COM网站上搜索自己需要的包
 
通过导入moment包,使用高级操作对时间进行格式化
导入moment包的命令:npm install moment
//导入moment名称
const moment = require('moment');
const dt = moment().format('yyyy-mm-dd hh:mm:ss');
console.log(dt);
如何安装指定的版本号的包
Npm install monent@2.22.2
同时最新的命令去安装包会覆盖之前安装的包
 
解决下包速度慢的问题
切换npm的下包镜像源
shuchenhao@shuchenhaodeMacBook-Air Node % npm config get registry
https://registry.npmjs.org/
shuchenhao@shuchenhaodeMacBook-Air Node % npm config set registry=https://registry.npm.taobao.org/
shuchenhao@shuchenhaodeMacBook-Air Node % npm config get registry                                 
https://registry.npm.taobao.org/
 
 

包的分类

项目包
开发依赖包:被记录到devDePEndencies节点中的包,只在开发期间会用
核心依赖包:被记录到dependencies节点中的包,在开发期间和项目上线之后都会用到
 
全局包:在执行安装命令的时候,如果提供-g参数,
 

开发自己的包

首先建立一个文件夹包含以下文件

Node.js-模块化/包/express路由

 

在Package.json中,存放版本,名称等内容

{
    "name": "ITh-tools",
    "version": "1.2.0",
    "main": "index.js",
    "description": "提供了格式化时间,HTMLEscape相关功能",
    "keywords": [
        "ith",
        "dateFormat",
        "escape"
    ],
    "license": "ISC"
}

在index.js中存放

//包的入口
const date = require('./dataformat.js')
const escape = require('./htmlEscape.js')

module.exports = {
    ...date,
    ...escape
}

在dataformat.js用于存放时间格式化的模块

//时间格式化
function dataformat(datastr) {
    const dt = new Date(datastr);
    const y = padZero(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;


}
//定义补0函数
function padZero(n) {
    return n > 9 ? n : '0' + n;

}

module.exports = {
    dataformat
}

在htmlEscape中存放转义html字符的函数模块

//定义转义HTML字符的函数
function htmlEscape(htmlstr) {
    return htmlstr.replace(/<|>|"|&/g, (match) => {
        switch (match) {
            case '<': return '&lt;';
            case '>': return '&gt;';
            case '"': return '&quot;';
            case '&': return '&amp;';
        }

    });
};
//定义还原HTML字符串的函数
function htmlUnEscape(str) {
    return str.replace(/&lt;|&gt;|&quot;|&amp;/g, (match) => {
        switch (match) {
            case '&lt;': return '<';
            case '&gt;': return '>';
            case '&quot;': return '"';
            case '&amp;': return '&';
        }

    });
};


module.exports = {
    htmlEscape,
    htmlUnEscape
}

在readme中存放介绍

##安装
‘’‘
npm install ith-tools
'''

##导入
‘’‘js
const itheima=require('ith-tools')
'''

##格式化时间
‘’‘js
//调用dateformat格式化时间
const newTIME = itheima.dataformat(new Date());
console.log(newTIME);
'''

##转义html中的特殊字符
‘’‘js
//带转换的字符串
const htmlstr = '<h1 title="abc">这是目标标签<span>123&nbsp;</span></h1>';
//调用htmlEscape方法进行转换
const str = itheima.htmlEscape(htmlstr);
console.log(str);
‘’‘

##还原html中的特殊字符串
’‘’js
//带还原的html字符串
const str2 = itheima.htmlUnEscape(str);
console.log(str2);
‘’‘

开源协议
ISC

然后发布过程如下

1.注册npm账号
2.终端中登陆npm
shuchenhao@shuchenhaodeMacBook-Air Node % npm login
npm notice Log in on https://registry.npmjs.org/
Username: shuchenhao
Password: 
Email: (this IS public) 1360037851@QQ.com
npm notice Please check your email for a one-time password (OTP)
Enter one-time password: 08342327
Logged in as shuchenhao on https://registry.npmjs.org/.
 
3.切换到发布包文件夹下面输入发布命令
npm publish
 

模块的加载机制

 内置模块是由官方提供的模块,内置模块的加载优先级最高。
 
 

ExPress

基于node.js平台,快速、开放、极简的web开发框架
4.17.1版本
 
ExPRess基于http模块封装出来的,提高开发效率
常见两种服务器
Web网站服务器:对外提供web网页资源的服务器 
API接口服务器:对外听过API接口的服务器
使用express,可以方便快速创建web网站服务器和API接口服务器
 
 
安装express
npm install express
 
创建一个基本的web服务器
//导入
const express = require('express');
//创建web服务器
const app = express();
//监听get请求
app.get('/user', (req, res) => {
    res.send({ name: 'ss', age: 20 });
});
app.post('/user', (req, res) => {
    res.send('请求成功');
})
//  启动
app.listen(80, () => {
    console.log('express running at http://127.0.0.1');
})
 终端运行服务器之后,通过postman进行接口测试
监听get请求

Node.js-模块化/包/express路由

 

监听post请求

Node.js-模块化/包/express路由

 

获取URL中带的参数

app.get('/', (req, res) => {
    //通过req.query可以获取到客户端发送过来的查询参数
    //默认情况下req.query是空对象
    console.log(req.query);
    res.send(req.query);
})

在query params中输入key和value,点击send,则可以在终端中获取URL中所带的参数

Node.js-模块化/包/express路由

 

 

shuchenhao@shuchenhaodeMacBook-Air Node % node 使用express创建服务器.js
express running at http://127.0.0.1
{}
{ name: 'ss', age: '10’ }

获取URL中的动态参数

//这里的:id是个动态参数
app.get('/user/:id', (req, res) => {
    //动态匹配的URL参数,默认的也是一个空对象
    console.log(req.params);
    res.send(req.params)
})

在user/之后不管输入几,都是动态获取到Id的值

Node.js-模块化/包/express路由

 

终端结果
shuchenhao@shuchenhaodeMacBook-Air Node % node 使用express创建服务器.js
express running at http://127.0.0.1
{ id: '1’ }
 
可以设置多个动态参数
app.get('/user/:id/:name', (req, res) => {
    //动态匹配的URL参数,默认的也是一个空对象
    console.log(req.params);
    res.send(req.params)
})

Node.js-模块化/包/express路由

 

shuchenhao@shuchenhaodeMacBook-Air Node % node 使用express创建服务器.js
express running at http://127.0.0.1
{ id: '3', name: 'sch' }

托管静态资源

通过express.static(),可以创建一个静态资源服务器,
如下,可以将public目录下的图片、css文件、js文件对外开放访问
注:express在指定的目录中查找文件,并对外提供资源的访问路径,因此,存放静态文件的目录名不会出现在URL中

 

const express = require('express');
const app = express();
//调用express.static()方法,快速对外提供静态资源
app.use(express.static('./anli'));
app.listen(80, () => {
    console.log('express running at http://127.0.0.1');
})

托管多个静态资源目录

多次调用express.static()函数
根据目录的添加的顺序查找所需的文件。
 

挂载路径前缀 

 
app.use('/abc', express.static('./files'));
在网页中输出的时候要加上/abc前缀
 

 Nodemon

 在编写调试node.js项目的时候,如果修改了项目的代码,则需要频繁的手动close,然后在重新启动,nodemon工具可以监听项目的变动,重新启动项目。
 

Express路由

在express中,路由指客户端请求和服务器处理函数之间的映射关系。
Npm init -y初始化一个package.JSON 包管理配置文件
 

模块化路由

不建议直接吧路由直接挂载在app上,推荐模块化
 
创建路由模块
//路由模块
const express = require('express');
const router = express.Router();
//挂载具体路由
router.get('/user/list', (re1, res) => {
    res.send('Get user list');
})
router.posy('/user/add', (re1, res) => {
    res.send('Add new user');
})
//出路由对象
module.exports = router;

再另一个js文件中注册路由

const express = require('express');
const app = express();
//导入路由模块
const router = require('./模块化路由.js');
//注册路由模块
app.use(router);

app.listen(80, () => {
    console.log('http://127.0.0.1');
})

为路由库快添加前缀

app.use('/api', router);

 

 

脚本宝典总结

以上是脚本宝典为你收集整理的Node.js-模块化/包/express路由全部内容,希望文章能够帮你解决Node.js-模块化/包/express路由所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。