node.js - 包、express
首先,要先在这里分享一下我的喜悦,从昨天开始其实一直都在喜悦当中的,我收到了我的第一份offer,这感觉不摆了,比第一桶金都还舒服,虽然我还没收到第一桶金哈哈,不过offer都得了应该也快了。
今天的内容有点小多,容我慢慢道来
1.
首先我们看到包的管理配置文件以及下包慢的问题,在我们多人协作下,是不是要经常把自己的代码共享出去通过git、github之类的,那么我应该发现一个问题,一个项目文件,有30M大小,而代码只有区区2M左右的内存,剩余的都给谁了?都给了第三方包也就是node_modules里面的内容,所以为了轻量化,我们在共享代码的时候肯定是不能带node_modules这个文件夹的,把她扔进.gitignore文件里面忽略掉,那我们没有了第三方包的依赖怎么执行代码呢,第三方包肯定还是要的,没有怎么能行,我们有一个package.json的文件在这里面存放了安装的所有的第三方包的内容。
1.1
快速创建packagejson
只需要在项目的文件中执行node init -y
要注意一下,只能在英文目录下去创建这个文件,这里的英文是当前目录为英文,也就是上一级为中文都没的关系,然后就是当我们运行npm i安装第三方包的时候就会把信息给到这个json文件中,所以我们在安装前要先创建json文件。
1.2
dependencies节点
这是这个json里面的节点名,记录了npm安装了哪些包
1.3
既然我们没有包,又知道了所有需要的包名,那么怎么来一次性安装所有的包?
npm install或者i不添加包名即可安装所有的包
1.4
卸载包
npm uninstall 包名没有简写
1.5
devDependencies节点
这个节点也是保存的安装的包,有些包是我们在项目开发过程中才会用到,而有些包使我们开发上线都会用到的包,我们一般把前者放在devDependencies节点里面,把后者放在dependencies节点里面。
当然他也有特定的安装方式
npm i 包名 -D
2.
然后我们看到下包会慢的一些原因,是因为我们的npm的服务器是国外的,通过海底光缆传过来的数据当然慢,所以这个时候我们需要把npm的镜像服务器换掉,通过npm config set registry可以查看当前npm的服务器
再通过npm config set registry='淘宝或者腾讯的镜像地址'就可以设置过来了。
之所以粗略带过,是因为我们有简便方法,通过npm先安装一个nrm全局可用工具,全局就需要在包名后面添加一个-g
然后nrm ls 可查看当前可设置的服务器地址,再用nrm use 加这个服务器名字即可使用。
3.
包的分类
我们把包分为两大类,一个是项目包,就是被安装到node_modules里面的包,这里面又有开发依赖包放在devDependencies节点里面的和核心依赖包开发上线都用得到的,
二个是全局包,放在c盘目录下面的,安装的时候通过-g参数安装的。
注意一下:只有工具性质的包才有全局安装的必要,因为他们提供了终端的一些命令
3.1
i5ting_toc
可以把md文件转换为html的小工具,注意是工具,这个其实挺方便的,前面一直用的Markdownpad2。
怎么来使用呢?
i5ting_toc -f md文件路径 -o表示浏览器打开
3.2
一个规范包的结构必须要包含三个东西
①每个包必须是单独目录
②包的顶级目录下必须包含package.json
③packag.json必须包含name、version、main三个属性
接下来我们就来做一个 属于自己的包:要实现的功能就为:可以格式化日期、可以对html中的字符转义为特殊字符又转义回来。
首先要初始化包的基本结构,创建一个包的文件夹,里面放三个文件,index.js、package.json、README.md分别表示包入口文件、包的配置文件、包说明文档。
接下来在初始化package.json里面的内容,{name:使我们包的名字到时候npm网站上搜索也是这个名字,所以使用前先去网站看一下有没有重名的,
version:版本号,
main:入口文件,说明了我们的导入就为这个文件要注意一下,如果说外界导入的时候只是导入了一个目录,并不是这个js文件,那么node就会去找这个目录下的package.json里面的main再去找入口文件,
description:详细介绍,
keywords:关键字是一个数组,
license:开原许可协议}
接下来就是在index.js中定义三个功能的函数了 ,这里有一个很重要的概念,模块化,我们的格式化时间是不是需要一个函数,还要补零是不是又要一个函数,那么这两个函数可以放在一个单独的js文件里面,我们的html转为特殊字符、特殊字符返回html也需要一个单独的js文件,完成过后需要在各自的文件把函数放进exports里面,然后index.js导入两个js文件他此时得到的是一个放有这几个函数的对象,我们需要通过es6语法中的扩展运算法,给她解构出来,就只有逗号分隔的函数了,这里有点绕可以配合代码好好理解下。

// 1.格式化时间
function dateFormat(time) {
const date = new Date(time)
let y = date.getFullYear()
let m = getZero(date.getMonth() + 1)
let d = getZero(date.getDate())
let h = getZero(date.getHours())
let mm = getZero(date.getMinutes())
let s = getZero(date.getSeconds())
return `${y}-${m}-${d} ${h}:${mm}:${s}`
} // 2.补零函数
function getZero(n) {
return n < 10 ? '0' + n : n
}
// 6.1共享成员
module.exports = {
dateFormat
}
// 4.html转义函数
function getHtmlCode(htmlStr) {
return htmlStr.replace(/<|>|"|&/g, match => {
switch(match) {
case '<':
return '<'
case '>':
return '>'
case '"':
return '"'
case '&':
return '&'
}
})
}
// 5.还原html
function getHtml(htmlStr) {
return htmlStr.replace(/<|>|"|&/g, match => {
switch(match) {
case '<':
return '<'
case '>':
return '>'
case '"':
return '"'
case '&':
return '&'
}
})
} // 6.2共享成员
module.exports = {
getHtmlCode,
getHtml
}
index.js
// 6.3 导入
const date = require('./src/dateFormat')
const strEscape = require('./src/strEscape') // 3.共享成员
module.exports = {
...date,
...strEscape
}
test.js
const bag = require('./index')
console.log(bag.dateFormat(new Date()));
console.log(bag.getHtmlCode('<h2>我是一个大温柔"嘻嘻"ss&</h2>'));
console.log(bag.getHtml('<h2>我是一个大温柔"嘻嘻"ss&</h2>'));

3.3
我们继续看到怎么来编写包的说明文档,就是把包的作用以及用法,注意事项说明清楚即可
// 1.导入
const express = require('express')
// 2.创建服务器
const app = express() // 4.监听客户端的get和post请求并响应
app.get('/index.html ', (req, res) => {
res.send({
"name" : "zs",
"sex" : "男",
"age" : 19
})
})
app.post('/index', (req, res) => res.send('post成功'))
// 3.开启服务器
app.listen(80, () => {
console.log(
'express server running at http://127.0.0.1'
)
})
4
获取url中的参数
通过req.query获得一个对象保存的参数
const express = require('express')
const app = express()
app.get('/', (req, res) => {
res.send(req.query)
})
app.listen(80, () => {
console.log('express server running at http://127.0.0.1');
})
获取url当中的动态参数
req.params
const express = require('express')
const app = express()
app.get('/:id', (req, res) => {
console.log(req.params);
})
app.listen(80, () => {
console.log('express server running at http://127.0.0.1');
})
5.3
托管静态资源
express.static()这个方法可以创建静态服务器的时候,将文件目录下的css、图片、js等共享出去对外开放。
app.use(express.static('文件夹'))要注意一点对谁开放那么这个目录是不会出现在url路径当中的
const express = require('express')
const app = express()
app.use(express.static('./clock'))
app.listen(80, () => console.log('express server running at http://127.0.0.1'))


如果要托管多个目录就把代码执行多次即可,但是要注意如果访问的文件名有几个目录都有的话,会按照顺序执行前面的。
挂在路径前缀
const express = require('express')
const app = express()
app.use('/abc',express.static('./clock'))
app.listen(80, () => console.log('express server running at http://127.0.0.1'))

5.4
今天最后的内容更新一个很实用的小工具,nodemon直接全局安装,他的作用就是我们平时改了一下代码,比如服务器必须重新断开重新连接,才会看到效果就会很麻烦,而有了这个工具后直接执行nodemon 文件名他就会检测到我们的代码修改情况自动去重新启动,就跟我们html的live一样
node.js - 包、express的更多相关文章
- Node.js包管理器:
Node.js包管理器: 当我们要把某个包作为工程运行的一部分时,通过本地模式获取,如果要在命令行下使用,则使用全局模式安装 使用全局模式安装的包并不能直接在JavaScript文件中用require ...
- Node.js系列-express(上)
前言 Node.js系列的第一篇:http,大概描述了通过使用node.js内置的api创建一个服务并监听request实现简单的增删改查.现在,我们就通过通读express官网及使用express框 ...
- 9.Node.js 包管理器npm
npm 是 Node.js 官方提供的包管理工具, 用于 Node.js包的发布.传播.依赖控制 安装 express ==> 流行的基于Node.js的Web开发框架,可以快速地搭建一个完整 ...
- 《Node.js 包教不包会》
<Node.js 包教不包会> 为何写作此课程 在 CNode(https://cnodejs.org/) 混了那么久,解答了不少 Node.js 初学者们的问题.回头想想,那些问题所需要 ...
- 如何设计一个基于Node.js和Express的网站架构?
前言 今年七月份,我和几个小伙伴们合伙建立了一个开发团队.业务开展如火如荼的同时,团队宣传就提上了日程,所以迫切需要搭建公司网站出来.确定目标后我们就开始考虑如果构建一个企业网站.先是进行业内调查,看 ...
- Node.js包管理器Yarn的入门介绍与安装
FAST, RELIABLE, AND SECURE DEPENDENCY MANAGEMENT. 就在昨天, Facebook 发布了新的 node.js 包管理器 Yarn 用以替代 npm .咱 ...
- Node.js、express、mongodb 实现分页查询、条件搜索
前言 在上一篇Node.js.express.mongodb 入门(基于easyui datagrid增删改查) 的基础上实现了分页查询.带条件搜索. 实现效果 1.列表第一页. 2.列表第二页 3. ...
- Node.js、express、mongodb 入门(基于easyui datagrid增删改查)
前言 从在本机(win8.1)环境安装相关环境到做完这个demo大概不到两周时间,刚开始只是在本机安装环境并没有敲个Demo,从周末开始断断续续的想写一个,按照惯性思维就写一个增删改查吧,一方面是体验 ...
- node.js和express.js安装和使用步骤 [windows]
PS: NODEJS:https://nodejs.org NPM:https://www.npmjs.com/ 一.node.js安装与配置 到https://nodejs.org/en/downl ...
- Node.js基于Express框架搭建一个简单的注册登录Web功能
这个小应用使用到了node.js bootstrap express 以及数据库的操作 :使用mongoose对象模型来操作 mongodb 如果没了解过的可以先去基本了解一下相关概念~ 首先注 ...
随机推荐
- Linux 进程打开最大文件连接数Too many open files
首先出现这个提示的原因:应用程序打开的文件数量超过了系统设定值. 如何查看当前系统每个用户最大允许打开文件数量: [root@registry ~]# ulimit -a core file size ...
- ZYNQ生成一个工程的基本步骤
Zynq 7000 SoC 是业界首款All Programmable SoC 组成: PL(FPGA部分) PS(ARM部分) PL和PS数据传输的 高效接口:AXI和ACP PS: 处理系统(Pr ...
- Django1.11 添加markdown语法支持
pip install markdown 在view.py 的视图界面:导入,圈起来的那两个包 对post进行处理, models.py 详情如下 测试,效果如图
- 12.9 supper
Super super的注意事项 super可以用来在子类中访问父类的public属性或方法,super只能出现在子类中. super()调用的是父类的默认无参构造,super(参数)可以调用父类的有 ...
- Idea集成CSSO插件压缩css文件
首先需要本地已安装node环境,并且csso-cli已通过npm安装到本地目录,只要能找到就行. 1. 打开Settings配置,确认图中的 File Watchers 插件是否已存在,如果不存在,去 ...
- 使用过 Redis 做异步队列么,你是怎么用的?
答:一般使用 list 结构作为队列,rpush 生产消息,lpop 消费消息.当 lpop 没有 消息的时候,要适当 sleep 一会再重试. 如果对方追问可不可以不用 sleep 呢? list ...
- 深入理解Java虚拟机-垃圾收集算法
一.判断对象是否可进行回收 1.引用计数算法 给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加1:当引用失效时,计数器值就减1:任何时刻计数器为0的对象就是不可能再被使用的.但是主流的 ...
- SpringDataJdbc使用数据库默认值的解决方法
SpringDataJdbc提供了 @ReadOnlyProperty 注解,这会造成由Repository保存的实体会忽略这个字段的值进行保存,进而采用数据库的默认值操作:而查询时这个字段也是能够查 ...
- MySQL 中有哪几种锁?
1.表级锁:开销小,加锁快:不会出现死锁:锁定粒度大,发生锁冲突的概率最高,并发度最低. 2.行级锁:开销大,加锁慢:会出现死锁:锁定粒度最小,发生锁冲突的概率最低,并发度也最高. 3.页面锁:开销和 ...
- 破界!Omi生态omi-mp发布,用小程序开发生成Web
omi-mp 是什么 Omi 框架是微信支付线研发部和 AlloyTeam 开源的通用 Web 组件化框架,基于 Web Components,用来开发 PC.手机浏览器或者微信.手Q webview ...