「这是我参与2022首次更文挑战的第2天,活动详情查看:2022首次更文挑战」
创建web服务器
const http=require('http');
const server=http.createServer()
server.on('request',(req)=>{
const url=req.url //客户端请求的url地址
const method=req.method
const str=`your request url is ${url},and method is ${method}`
console.log(str);
})
server.listen(80,()=>{
console.log('server running at http://127.0.0.1');
})
2.res响应对象,主要就是将内容响应给客户端,但要注意一点,如果是中文的会有乱码情况。所以需要加一行改变。之后要重启一下服务器
res.setHeader('Content-Type','text/html:charset=utf-8')
res.end(str)
模块化
什么是模块化
Node.js 模块机制采用了 Commonjs 规范,弥补了当前 JavaScript 开发大型应用没有标准的缺陷,类似于 Java 中的类文件,Python 中的 import 机制,Node.js 中可以通过 module.exports、require 来导出和引入一个模块.
在模块加载机制中,Node.js 采用了延迟加载的策略,只有在用到的情况下,系统模块才会被加载,加载完成后会放到 binding_cache 中。
把一个大文件拆成独立并互相依赖的小文件。 1.模块化的好处 提供复用性,可用性,按需加载。
模块主要分为:内置,自定义,第三方
2.加载模块,使用rquire()方法,需要注意的是,可以省略.js的后缀名 模块作用域,顾名思义就是访问有限制,外部无法访问内部变量
fork.js
const username='zs'
function sayHello(){
console.log('aaa');
}
sayHello()
test.js
const custom=require('./fork')
console.log(custom);
通过打印module来查看模块的详细情况,通过module.exports将模块内的成员共享出去,一起使用。而require()方法就是导入共享的成员。 使用moudle.exports和exports方法结果都一样。
export 用于对外输出模块,可导出常量、函数、文件等,相当于定义了对外的接口,两种导出方式:
- export: 使用 export 方式导出的,导入时要加上 {} 需预先知道要加载的变量名,在一个文件中可以使用多次。
- export default: 为模块指定默认输出,这样加载时就不需要知道所加载的模块变量名,一个文件中仅可使用一次。
fork.js
console.log(module);
module.exports.username='zs';
module.exports.sayHello=function (){
console.log('aaa');
}
demo.js
const custom=require('./fork')
console.log(custom);
案例:
exports.age='20'
module.exports={
age:22,
name:'xz'
}
//{ age: 22, name: 'xz' }
观察以上数据,我们可以猜猜看最后导出的内容是什么。 如果又exports和moudle.exports,我们最终导出的结果都是以moudle.exports为基准。
exports.age='20'
module.exports.name='zyy'
//{ age: 20 name:'zyy'}
exports={
age:19,
name:'zyy',
}
module.exports=exports
module.exports.job='仙女'
//{ age: 19 name:'zyy',job:'仙女'}
所以为了避免发生混乱,我们只使用其中一种就可以了。
CommonJs模块化规范:
- module变量就代表当前模块
- exports就是module.expotrs
- 加载模块就是module.expotrs属性,require()用于加载