1、Node.js官方模块:
6、http模块 - 超级重点:搭建服务器&文件系统
var http=require("http");
var url=require("url");
var fs=require("fs");
//创建服务器应用
var app=http.createServer();
//为其绑定端口号
app.listen(80);
//为其绑定了请求事件:http:请求 - 响应模型,必须要有一个请求(前端),才有一个响应(后端)
app.on("request",(req,res)=>{//只要有人来请求,我就会触发
//req:request(请求)对象,他有一个属性叫做req.url,获取到前端传到后端的路由和请求消息,但是路由和请求消息是融为一体,不方便我们获取某个部分,所以我们可以引入url,进行解析!分开两部分
var objUrl=url.parse(req.url,true);
//把路由保存了起来!
var router=objUrl.pathname;
if(router=="/"||router=="/index.html"){//判断路由的不同,读取不同的页面给用户看,引入fs文件模块
//res: response(响应)对象,他有一个方法叫做res.end("响应的内容"/buf) - 可以想应该给前端想要看的东西
fs.readFile(__dirname+"/public/html/index.html",(err,buf)=>{
res.end(buf)
})
}else if(router.match(/html/)!=null){
fs.readFile(__dirname+/public/html${router},(err,buf)=>{
res.end(buf)
})
}else if(router.match(/css|js|jpg|png|gif|woff|woff2|ttf2/)!=null){
fs.readFile(__dirname+/public${router},(err,buf)=>{
res.end(buf)
})
}
})
扩展:字符串有一个API:match var rs=str.match(reg);//几乎和indexOf一致,但是支持正则,我们不关心为什么,只关心为不为null
强调:一切的src和href都是一个请求都是一个路由,这个请求就需要后端来解析,根据不同的请求响应不同的内容!
完成目标1:使用代码搭建服务器和文件系统
2、模块(每个.js文件)分类 1、官方模块:require("官方模块名"); 2、第三方模块 3、自定义模块:require("./模块路径");
为什么有的模块引入要./有的又不用./?
自定义模块:分为两大类
1、文件模块:创建xx.js去公开了需要公开的内容,主模块引入,就必须写为require("./模块路径");
2、目录模块:3种
1、比如创建m1的文件夹,在其中创建index.js的文件,去公开了需要公开的内容,主模块引入,就必须写为require("./m1");
2、比如创建m2的文件夹,在其中创建suibian.js的文件,去公开了需要公开的内容,主模块引入,就必须写为require("./m2");
必须在创建一个必须名package.json的配置文件,写入:{"main":"suibian.js"}
3、创建一个文件夹必须名为node_modules,在在其中创建创建m3的文件夹,在其中创建index.js的文件,去公开了需要公开的内容,主模块引入,就必须写为require("m3");
其实真实开发中,我们程序员用的最多的就是文件模块,目录模块的第三种方式其实根本不是给人用的(第三方模块下载后会自动创建此文件夹)
3、如何下载第三方模块: npm工具:Node Package Manager - Node.js的模块/包/软件管理器,专门用于管理第三方模块的,作用:下载、更新、删除、维护包之间的依赖关系 检查npm是否安装成功:npm -v 如果能看到版本号,说明安装成功 打开网址:npm官网:www.npmjs.com 所搜你需要用到的模块,尽量用带有完全符合标签的那个包,或者是 第一个包 在你的项目之中打开cmd 1、下载:npm i 包名 2、删除:npm un 包名 3、更新:npm up 包名