node.js - http、模块化、npm

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

我们今天先看到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/blog/2680817/202204/2680817-20220412183601710-116090953.png

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'))

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

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

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下载的包的详细信息这两个都不能去修改

最后如果要安装指定版本的包的话只需要在包名的后面添加@版本号

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,496评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,407评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,632评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,180评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,198评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,165评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,052评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,910评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,324评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,542评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,711评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,424评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,017评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,668评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,823评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,722评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,611评论 2 353

推荐阅读更多精彩内容