当前位置:网站首页>nodejs基础快速复习
nodejs基础快速复习
2022-06-22 10:15:00 【zh阿飞】
node 快速了解
hello node.js
console.log("hello Node.js");
let http = require("http");
// request 请求对象 response 响应的对象
let server = http.createServer(function (request, response) {
// 这是一个写入流 200 :传一个状态码 Content-Type: 传一个什么样的内容给浏览器
response.writeHead(200, {
"Content-Type": "text/html; charset=utf-8"});
// 会出现两次访问
if(request.url !== "/favicon.ico") {
// 清除第二次访问
console.log("访问");
response.write("hell node.js");
response.end("结束"); // 要加上这个, 不然会一直转
}
});
// 监听 8000 端口
server.listen(8000, "127.0.0.1");
console.log("Server running at http://127.0.0.1:8000/");
模块
// moudule.app.js
var counter = function (arr) {
return "there are " + arr.length + " el";
}
var adder = function (a, b) {
return `the sum of the 2 number is ${
a+b}`;
}
var PI = 3.14;
// module.exports.counter = counter;
// module.exports.adder = adder;
// module.exports.PI = PI;
module.exports = {
counter,
adder,
PI
}
// module.js
// 模块全部导入
var stuff = require('./module.app')
// 只导入部分模块
var pi = require("./module.app").PI;
var {
adder} = require("./module.app")
console.log(stuff.counter([23, 3, 5]));
console.log(stuff.adder(23, 3));
console.log(adder(23, 9));
console.log(stuff.PI);
console.log(pi);
事件
let events = require("events");
// 新增事件对象
let myEmitter = new events.EventEmitter();
// 绑定事件监听函数 someEvent: 事件名称
myEmitter.on("someEvent", function (message) {
console.log(message);
})
// 手动触发事件
myEmitter.emit("someEvent", "手动触发事件");
例子, 用 ES6 的语法也可以
let events = require("events");
// 是一个工具库
let util = require("util");
function Person(name) {
this.name = name;
}
// util.inherits(子类, 父类); 实现子类可以继承父类
util.inherits(Person, events.EventEmitter);
let xiaoming = new Person("xiaoming");
let lucy = new Person("lucy");
// // 用 ES6 的语法
// class Person extends events.EventEmitter {
// constructor (name) {
// super();
// this.name = name;
// }
// }
let person = [xiaoming, lucy];
person.forEach(function (person) {
person.on("say",(message) => {
console.log(person.name + " say: " + message);
})
});
xiaoming.emit("say", "hi");
lucy.emit("say","hello");
输出为
xiaoming say: hi
lucy say: hello
读取文件fs
let fs = require("fs");
// 同步读文件
let readSyncData = fs.readFileSync("readMe.txt", "utf-8");
// 只要是异步操作都要有回调函数
fs.readFile("readMe.txt", "utf-8", (err, data) => {
console.log("异步读文件\n\t我读出的数据是:", data);
})
let writeData = "我fs.js在给你writeMe.txt写数据。。。"
fs.writeFile("./writeMe.txt", writeData, (err) => {
console.log("异步写文件完成");
console.log(err);
})
console.log("同步读文件, 读出的内容是",readSyncData);
// node 执行javascript代码是单线程的, 是一句一句的执行代码,但当
// 执行到 有异步操作的时候,主线程就把他挂载上,之后就继续往下执行代码,
// 具体哪个时候执行也不清楚, 当主线程执行完了就可以再来执行这个异步的代码
操作目录和文件
同步的只需在后面写 Sync, 再去掉回调函数
// 1. 创建/删除 目录
// fs.mkdir("dirFS", (err) => {});
// fs.rmdir("dirFs", (err) => {});
// // 2. 创建/删除 文件
// fs.write()
// fs.unlink("writeMe.txt", (err) => {});
请求/响应数据
请求、响应 JSON , 在发送 json 时, 要用
JSON.stringify(jsonData)
把json数据转化为字符串,这样才能传输, 在客户端要用josn 时, 用 json 的放JSON.parse(str)把字符串转化为对象// 请求 json数据 并解析 let http = require("http"); // request 请求对象 response 响应的对象 let server = http.createServer(function (request, response) { // 这是一个写入流 200 :传一个状态码 Content-Type: 传一个什么样的内容给浏览器 response.writeHead(200, { "Content-Type": "application/json"}); let myObj = { name: "zhfei", job: "programmer", age: 22 } // 要把 JSON 数据序列化为字符串才能在网络中传输 // 在客户端反序列化 JSON.parse() response.end(JSON.stringify(myObj)); // 监听 端口 }); server.listen(3000, "127.0.0.1"); console.log("Server running at http://127.0.0.1:3000/");请求/响应 HTML
注意, Conten-type: 的值要为 text/html , 不然浏览器不会解析
// 请求 HTML 数据 并解析 let http = require("http"); let fs = require('fs'); let myReadStream; // 写在这里不对,浏览器刷新什么都没有了 // myReadStream = fs.createReadStream(__dirname + "/index.html", "utf8"); // request 请求对象 response 响应的对象 let server = http.createServer(function (request, response) { // 如果是 text/plain 浏览器就不会解析HTML了 response.writeHead(200, { "Content-Type": "text/html"}); // 把 HTML 写入响应 myReadStream = fs.createReadStream(__dirname + "/index.html", "utf8"); myReadStream.pipe(response) }); server.listen(3000, "127.0.0.1"); console.log("Server running at http://127.0.0.1:3000/");
边栏推荐
- Aliyun OS上证书签发过程(certbot)
- 传iPhone 14将全系涨价;TikTok美国用户数据转移到甲骨文,字节无法访问;SeaTunnel 2.1.2发布|极客头条...
- Bluetooth, WiFi, ZigBee, Lora, Nb lot, call signal, network signal 4G
- 被曝泄露超 1.7 亿条隐私数据,学习通回应:尚未发现明确证据
- 【Shell】常用指令集锦
- 使用pytorch mask-rcnn进行目标检测/分割训练
- php 数据库 mysql提问
- 不要再傻傻分不清 hash、 chunkhash 和 contenthash 啦
- LeetCode Algorithm 剑指 Offer 24. 反转链表
- [deep learning] great! The new attention makes the model 2-4 times faster!
猜你喜欢

Advanced Web Zone record of attack and defense world (I)

抖音实战~手机号一键注册登录流程(验证码)
![[LineCTF2022]BB](/img/9d/c5b0ce1e603d40efc5245ba074aa77.png)
[LineCTF2022]BB

一条TCP连接时占用内存空间多少?

Analysis of thinkphp5.0.24 deserialization vulnerability

Qt编写物联网管理平台36-通信协议

Web Configuration of Visual Studio Code

Tiktok practice ~ personal Center

Bloom filter optimization - crimsondb series of papers (I)

Tiktok practice ~ one click registration and login process of mobile phone number (verification code)
随机推荐
TCP建立连接过程(深入源码理解3次握手)
Pytorch实现波阻抗反演
HMS core news industry solution: let technology add humanistic temperature
缓存穿透利器之「布隆过滤器」
Encryption market plummeted, Seth triggered a new round of concern
LeetCode Algorithm 剑指 Offer 24. 反转链表
代码签名证书一旦泄露 危害有多大
How to transfer the values in the database to JSP pages through servlets and display them in El expressions?
Discussion on the open source GIS solution of our company
Solend废止「接管巨鲸」提案 清算「炸弹」未除
三个月让软件项目成功“翻身”!
【这款工具配合jmeter,会让你的工作效率至少提升80%,强烈推荐给大家】
搭建OpenPGP Key server
MySQL skip scan range small function to solve big problems?
[deep learning] great! The new attention makes the model 2-4 times faster!
LeetCode Algorithm 剑指 Offer 18. 删除链表的节点
6-42 sparse matrix transpose
thinkphp5.0.24反序列化漏洞分析
[LineCTF2022]BB
大学生期末考试SQL语句