nodejs-------自定义模块、内置模块

//****************************************************
Node特点:
异步非阻塞I/O
事件与回调函数
单线程
跨平台
//****************************************************
一个单独的文件就是一个模块,模块内将需要对外暴露的变量放到exports对象里,可以是任意对象,函数,数组等,未放到exports对象里的都是私有的。用require方法加载模块,即读取模块文件获得exports对象。
//****************************************************
NPM是随同NodeJS一起安装的包管理工具

npm常见命令  
install
uninstall
update
list
view

package.json
定义了一个项目所需要的各种模块,以及项目的配置信息(比如名称、版本、许可证等元数据)
//****************************************************
node.js可以解析js代码(没有浏览器安全级别的限制),提供很多系统级别的api,如:文件的读写、进程的管理、网络通信。。。。
//****************************************************
热更新:每次的修改等操作 不用再在终端中进行操作 ,刷新页面即可
安装     npm install nodemon -g
启动     nodemon xxxx.js

可以不用执行node,自动更新

搭建第一个服务器
在这里插入图片描述

一,自定义模块

在这里插入图片描述
html.js

//1.内置模块2.第三方模块3.自定义模块
//用一个变量或者常量去接收模块暴露的内容
const { doAdd } = require("./doAdd.js");
//obj1 => {doAdd:function(){}}
/* {doAdd}=>{doAdd:function(){ //解构赋值
    
}} */
const obj2 = require("./doMulti.js");
//复合运算
function exec(a, b) {
  console.log(doAdd(a, b), obj2.doMulti(a, b));
}
exec(10, 20);
在编辑器的相应文件单击右键打开终端,
如果没有设置好路径要先设置到淘宝
“npm install -g cnpm --registry=https://registry.npm.taobao.org”,
然后安装热更新“npm install nodemon -g”,
然后运行文件输入 “node 文件名”,
然后启动热更新 “nodemon 文件名”

二.内置模块

url

操作:--require(‘url’)
node
url——提供很多方法
url.parse(urlString)查询url信息,将url字符串解析成对象
url.format(urlObject)将信息解析成正常的url地址
url.resolve(from, to)将两个url解析成一个完整的url   返回从根目录指定到当前目录的绝对路径url,一个标准的url格式
const url = require("url");

//parse 将url字符串解析成对象

/* let urlstr = "http://www.test.com:3000/a/b/index.js?username=admin";

let urlobj = url.parse(urlstr);

console.log(urlobj); */

//format   将一个对象转换成一个url字符串
/* let urlobj = {
  protocol: "https",
  port: 5000,
  host: "www.example.com",
};
console.log(url.format(urlobj));
 */
//resolve
let url1 = url.resolve("/one/two/three", "/four");
let url2 = url.resolve("http://example.com/", "/one"); // 'http://example.com/one'
let url3 = url.resolve("http://example.com/one/", "/two");

console.log(url3);

http

const http=require('http');
http.createServer((req,res)=>{
    res.writeHead(200,{"content-type":"text/html;charset=utf-8"});
    res.end("<h1>干嘛</h1>");
}).listen(3000,"127.0.0.1");
const http = require("http");
http
  .createServer((req, res) => {
    //res.end("hello nodeJS");//响应结束并返回对应的数据
    res.writeHead(200, { "content-type": "text/html;charset=utf-8" });
    res.end("<h1>响应内容</h1>");
  })
  .listen(3000, "127.0.0.1");

events

events 对事件进行处理的方法—require(‘events’)

on  注册事件

emit  发布事件

once 执行一次
const Events = require("events");
let evt = new Events();
evt.on("loginSuccess", function () {
  console.log("登录成功");
});
//evt.emit("loginSuccess");
//evt.once("loginSuccess");
evt.once("loginSuccess", function () {
  console.log("Aa");
});

evt.emit("loginSuccess");
evt.emit("loginSuccess");

fs

fs(file system)跟文件相关的方法—require(‘fs’)
1)stat(url,fc(err,stats)) 获取文件的一些信息  isFile()
2)mkdir() 新增目录的
3)writeFile(url,con,fc) 书写文件 覆盖
4)appendFile(url,con,fc) 追加文件内容  添加
5)读取文件的内容:readFile(url,fc)
6)列出目录的东西:readdir
7)重命名目录或文件:rename
8)删除目录与文件:rmdir(目录),unlink(文件)
readdirSync(src) 同步读取目录信息

单词后面加Sync  就可以不用写function 
const fs = require("fs");

//************************************************
fs.stat("./data.json", (err, stats) => {
  if (err) {
    return;
  }
  console.log(stats);
  console.log(stats.isFile());
});

//************************************************
fs.mkdir("test1", (err) => {
  console.log(err);
});

//************************************************
fs.writeFile("./data.json", "[1,2,3]", (err) => {});

//************************************************
fs.appendFile("./data.json", "aaa", (err) => {
  if (err) return;
});

//************************************************
fs.readFile("./index.html", (err, con) => {
  console.log(con.toString());
});

//************************************************
fs.readdir("./test1", (err, con) => {
  console.log(con);
});

//************************************************
fs.rename("./test", "./test2", (err, con) => {});

//************************************************
fs.rmdir("./test1", (err, con) => {
  console.log(err);
});
//************************************************
fs.unlink("./data.json", (err, con) => {});

//************************************************
fs.readdir("test1", (err, con) => {
  if (err) return;
  con.forEach((item) => {
    fs.unlink("test1/" + item, (err, con) => {});
  });
  fs.rmdir("test1", () => {});
});

//************************************************
let con = fs.readFileSync("index.html");

console.log(con);

queryString

用于解析与格式化 URL 查询字符串-require(‘querystring’)
querystring.escape(str)解析对象,字符串(汉字)
querystring.parse(str[, sep[, eq[, options]]])转换成对象
querystring.stringify(obj[, sep[, eq[, options]]])转换成字符串
querystring.unescape(str)解析escape转换的编码,解析成汉字
const qs = require("querystring");

let str = "username=胡亮亮&password=111";

//let obj = qs.parse(str);

//console.log(obj);

//console.log(qs.stringify(obj));

console.log(qs.escape(str));

console.log(qs.unescape(qs.escape(str)));

const qs=require("querystring");

let str="username=胡亮亮&password=111";


http和fs的组合
1.先创建三个html页面,命名分别为index.html、login.html、404.html 页面内容随便写
2.写一个js文件,命名可随便 ,如:server.js

//路由
const http = require("http");
const fs = require("fs");

http
  .createServer((req, res) => {
    res.writeHead(200, { "content-type": "text/html;charset=utf-8" });
    //先取路径(客户端请求的资源)
    let url = req.url;

    if (url == "/index.html" || url == "/") {
      // readFile后面加Sync 就可以不用写第二个参数回调函数
      let con = fs.readFileSync("index.html").toString();
      res.end(con);
    } else if (url == "/login.html") {
      let con = fs.readFileSync("login.html").toString();
      res.end(con);
    } else {
      let con = fs.readFileSync("404.html").toString();
      res.end(con);
    }
  })
  .listen(3000, "localhost");

3.然后在vscode编辑器中单击相应文件夹,打开终端,然后运行文件:node 文件名

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值