乐趣区

关于javascript:nodejs-http模块化npm

明天是 node 学习的第二天,其实越往后面学越感觉有点相熟的滋味了,光针对于 node 来说哈,为什么呢,因为我之前学过一点云计算的货色,过后感觉没什么用搞了下服务器客户端这些,没想到这里还能用一用,至多看到服务器这些概念一点不生疏,看到 npm 一点不奇怪,我过后用的都是 yum。

1.

咱们明天先看到 http 模块,也是 node 外面的第一大模块,内置模块的内容,http 是创立 web 服务器的模块,在前端当中,不须要 iis、Apache 这些第三方服务器软件,只须要一个 node.js 提供的 http 模块就可能写一个服务器,这么一看,貌似 node 还多弱小的。

咱们的服务器个别分为三个概念,ip、域名、端口,有了这三个你就能够拜访一个服务器。

怎么来创立啊 web 服务器?

首先要导入 http 内置模块

const server = http.createServer()

这个创立了一个服务器实例,接下来还要对他绑定一个监听事件,可能监听到客户端发送过去的申请

server.on(‘request’,(req, res) => {})

留神这个事件外面有两个参数,这两个参数代表什么意思咱们前面再说,当你绑定完事件过后,就能够开启这个服务器了

server.listen(‘端口号’,callback)

这外面两个参数一个填端口号,一个是开启服务器后的回调函数。

const http = require('http')
const server = http.createServer()
server.on('request', (req, res) => console.log('someone visit our webServer'))
server.listen(83, () => console.log('开启胜利'))

浏览器上拜访 服务器过后就会在服务器的终端弹出来监听外面要打印的信息
https://img2022.cnblogs.com/b…

1.1

咱们接下来说一下监听事件外面两个参数到底是个什么?

首先第一个 req 对象,它是一个对象,蕴含了客户端相干的数据和属性,你要对拜访进来的客户端忘性操作的话,只管用到这个对象外面的属性和办法即可

req.url 是客户端申请的 url 地址 req.method 是客户端的申请形式

const http = require('http')
const server = http.createServer()
server.on('request', req => {
    const url = req.url
    const method = req.method
    console.log(`your request url is ${url} and your request method is ${method}`)
    // post 申请借助 postman
})
server.listen('80',() => console.log('server is running in http:127.0.0.1'))

1.2

而后是 res 对象,没错,他也是一个对象,这是蕴含了服务器相干属性和数据的对象

res.send()能够向客户端发送你想发送的内容,而且它代表着申请完结,如果发送的内容外面蕴含中文的话,还须要用到 res 来设置表头编码不然会呈现乱码的景象

const http = require('http')
const server = http.createServer()
server.on('request', (req, res) => {
    let str = 'your request url is'+req.url+'+ your request method is'+req.method+''
    res.end(str)
})
server.listen(80, () => console.log('server is running at http://127.0.0.1'))

1.3

来一个案例,依据不同的 url 反映出不同的页面,这个应该很经典吧

// 1. 获取到用户的 url
const http = require('http')
const server = http.createServer()
server.on('request', (req, res) => {
    let url = req.url
    // 2. 设置默认的页面为 404
    let content = `<h1>404 Not Found</h1>`
    // 3. 判断用户是否申请的是首页
    if (url == '/' || url == '/index.html') {
        content = `<h1> 首页 </h1>`
    // } 4. 判断用户是否拜访的是分页
    } else if (url == '/son.html') {content = `<h1> 子页 </h1>`}
    // 5. 设置申请头 避免中文乱码
    res.setHeader('Content-Type', 'text/html; charset=utf-8')
    // 6. 发送内容并完结申请
    res.end(content)
})
server.listen(80, () => console.log('your request is running at http://127.0.0.1'))

2.

咱们接下来看到模块化,模块化是指解决一个简单问题的时候,自顶向下逐层把零碎划分到若干模块的过程,对于整个零碎来说模块是可组合、合成和更换的单元。

在咱们编程世界外面,模块化就是恪守固定的规定,把一个大文件拆分成独立并相互依赖的小模块,大家分工合作。

Node.js 模块分类?

在咱们 node 外面模块分为三个局部,第一个是内置模块:咱们后面学的都是内置模块,fs、path、http 等

第二个是自定义模块:什么叫做自定义模块,其实就是咱们本人写的这个 js 文件他就是自定义模块

第三个是第三方模块:就是由第三方开发进去的模块,须要提前下载

而后 咱们的模块都须要加载用到 require

还会有模块作用域,也就是在咱们自定义模块外面申明的变量函数,在里面的模块是拜访不到的。

那么有没有方法来拜访呢?

是有的,向外共享模块成员的办法要用到一个 module 对象,它是每个 js 自定义模块都有的内置对象,而后在这外面有一个要害的对象,exports,在咱们后面,require 这个自定义模块的时候失去的内容其实就是 exports 对象外面的内容,

所以说有时候为空,就是因为没给 exports 赋值,他就是一个空对象,咱们在写的时候能够写成 module.exports 也能够是 exports

module.exports = {
    uname : '张三',
    sayHello : function() {console.log('hello node');
    }
}
const md = require('./module 对象共享')
console.log(md);

然而在模块化这里 exports 有几个要留神点的,始终要记住一点不论是 exports 还是 module.exports 他们尽管能实现一样的成果然而始终认为 module.exports 外面的数据为准。

为了避免凌乱,最好不要将 exports 和 module.exports 混用

模块化标准

node 遵循的是 commenJS 模块化的标准,包含咱们后面说的 module 代表以后模块,exports 是对外的接口,require 用于加载模块都是 commenJS 标准的,然而我 vue 入了一点门被劝回来的那里,刚好看到前面应该遵循的都是 es6 模块化标准了,这个 commenJS 逐步要淘汰了。

3

持续看到包和 npm 的一些内容,首先要明确什么叫包,第三方模块就叫包,包是由第三方集体和团队做进去的,都是收费的。

咱们为什么要用包呢?

包是基于内置模块封装进去的,提提供了更高级、更简便的用法,其实就相当于 jQuery 和浏览器内置对象的关系,jq 的 ajax 办法就是通过 xhr 封装来的撒。

npm

咱们首先看到一个案例对工夫格式化如果用咱们的传统做法,也就是自定义模块的做法。

const module 对象共享 = require("./module 对象共享")

function timeFormat(dataStr) {let date = new Date(dataStr)
    let y = date.getFullYear()
    let m = addZero(date.getMonth() + 1)
    let d = addZero(date.getDate())
    let h = addZero(date.getDate())
    let mm = addZero(date.getDate())
    let s = addZero(date.getDate())
    return `${y}-${m}-${d} ${h}:${mm}:${s}`
}
function addZero(n) {return n = n < 10? '0' + n : n}
module.exports.timeFormat = timeFormat
const time = require('./ 格式化工夫传统做法')
// console.log(time);
const date = new Date()
console.log(date);
console.log(time.timeFormat(date));

这就实现了一个对于工夫格式化的操作,舒服还是有点麻烦,但咱们当初有了 npm 就不一样了,能够用 npm 装置一个 moment 的包,装置导入查看文档 api 这三步曲走起。

const moment = require('moment')
const timer = moment().format('YYYY-MM-DD HH:mm:ss')
console.log(timer);

之前多少代码量,当初多少代码量,这就是为什么要用包。

最初说一下当你装置了包后文件夹多多出两个文件一个 node_modules 的文件夹这外面寄存的 npm 下载的包文件,一个是 pachage_lock.json 的配置文件这外面是后面文件夹外面所有 npm 下载的包的详细信息这两个都不能去批改

最初如果要装置指定版本的包的话只须要在包名的前面增加 @版本号

退出移动版