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/");