目录
1.模块简介
Node使用Module模块去划分不同的功能,以简化应用的开发。Modules模块有点像C++语言中的类库。每一个Node的类库都包含了十分丰富的各类函数,比如http模块就包含了和http功能相关的很多函数,可以帮助开发者很容易地对比如http,tcp/udp等进行操作,还可以很容易的创建http和tcp/udp的服务器。要在程序中使用模块是十分方便的,只需要如下:
在这里,引入了http类库,并且对http类库的引用存放在http变量中了。这个时候,Node会在我们应用中搜索是否存在node_modules的目录,并且搜索这个目录中是否存在http的模块。如果Node.js找不到这个目录,则会到全局模块缓存中去寻找,用户可以通过相对或者绝对路径,指定模块的位置,比如:var myModule = require('./myModule.js');
模块中包含了很多功能代码片断,在模块中的代码大部分都是私有的,意思是在模块中定义的函数方法和变量,都只能在同一个模块中被调用。当然,可以将某些方法和变量暴露到模块外,这个时候可以使用exports对象去实现。
注:一个js文件就是一个具有独立功能的模块。
2.模块的导入与导出
- module.exports导出模块成员
- require()导入模块成员
(1)导入模块
- 作用:加载并执行模块中的代码!
- 使用:
require()
方法的 ( ) 中可以写:
// 1. node自带的模块,如fs、http
require('fs');
// 2. 通过路径引入的自己的js文件
require('./fses.js');
注:① require()
加载模块是同步加载!② 引入自己的js文件时,路径中的./或者../不能省略。③ 如果省略,require()
会把它当成是一个node自带的模块。④ 模块后缀.js
可以省略不写
(2)导出模块
每个模块中都有一个 module
对象,module
对象中有一个exports
对象,在CommonJS 中规定:一个模块返回数据可以通过module.exports和rexports两个关键字来返回,模块最终返回的仅仅只是 modules.exports。exports 仅仅只是 modules.exports的一个引用。我们可以把需要导出的成员都挂载到module.exports
对象上。
3.HTTP服务
(1)http模块
// node把处理web服务器相关的功能 封装到了 http模块中
// 1、导入http模块
var http = require('http');
// 2、使用http这个模块中的createServer()创建一个服务器实例对象
var server = http.createServer();
// 3、给服务器对象注册一个request事件,当浏览器有请求发送过来时,服务器会接收,并且执行后面的回调函数
// 请求处理函数function(形参1,形参2){}
// 形参1:request请求对象 获取到当前请求的路径,方法等信息
// 形参2:response响应对象 发送响应数据
server.on('request', function(request, response) {
console.log('浏览器连接了哟!');
// 向客户端页面返回字符串
response.write("hello node");
// 结束响应
response.end();
});
// 4、绑定端口号,启动web服务器
server.listen(12345, function() {
console.log(' 请访问http://localhost:12345');
});
注:注册request处理函数有两个形参 request和response 不要搞混;在写完服务器代码后 保存代码 —>在cmd中 node 文件名
然后回车执行;每次修改代码后要重新在cmd中 node 文件名
执行这个文件(supervisor插件可监听服务端代码);端口号尽量写的大一些 大于3000 否则容易和已经运行的软件所占用的接口相冲突!
(2)fetch() 方法
fetch是一个可以从程序向服务器发起http请求的技术。fetch() 方法返回值为promise对象。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<button onclick="getMsg()">GET</button>
<button onclick="postMsg()">POST</button>
<script>
//fetch() 方法参数1为url(服务器地址)
//允许跨域:服务器中用setHeader()方法,或写在writeHead()方法中。
//fetch() 方法参数2为parms(对象)
//{method:'GET'/'POST',body: {'请求体'},header:{'Content-Type':"application/x-www-form-urlencoded"}}
let url="http://127.0.0.1:3000";
let uName="tom";
let pwd='123';
function getMsg(){
let myUrl=`${url}/person?username=${uName}&pwd=${pwd}`;
fetch(myUrl).then(data=>data.text()).then(res=>{
console.log(res);
});
}
function postMsg(){
let myUrl=`${url}/person/login`;
fetch(myUrl,{
method:"POST",
// body:"username=lucy&pwd=888",
body:JSON.stringify({
username:"Merry",
age:20
}),
headers:{
'Content-Type':"application/x-www-form-urlencoded"
}
}).then(data=>data.text()).then(res=>{
console.log(res);
});
}
</script>
</body>
</html>