首页IT科技nodejs是干啥的(node.js – http、模块化、npm)

nodejs是干啥的(node.js – http、模块化、npm)

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

今天是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)

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

浏览器上访问 服务器过后就会在服务器的终端弹出来监听里面要打印的信息

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

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

声明:本站所有文章             ,如无特殊说明或标注                   ,均为本站原创发布                   。任何个人或组织      ,在未征得本站同意时       ,禁止复制                   、盗用             、采集       、发布本站内容到任何网站                   、书籍等各类媒体平台      。如若本站内容侵犯了原著者的合法权益                   ,可联系我们进行处理             。

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
react中路由(react-router6.4+的项目种路由实现方式(列举两种))