全局对象
// 全局对象的宿主,类似于 window 对象
global
process
// 是命令行参数数组
process.argv
global.process
// =========
// 输出到控制台中
process.stdout.write('hello');
// 将当前控制台中的文件清空
process.stdout.write('\033[2J');
process.stdout.write('\033[0f');
process.exit();
// =========
// 清空终端
process.stdin.resume();
process.stdin.on('data', (input) => {
// console.log(i++);
// 要在此处知道到底input是啥?
input = input.toString().trim();
});
// =========
// 下一个事件循环时间处理
process.nextTick(callback);
// 尽量不要采用如下的方式来写
// // 不断的循环阻塞了代码的执行
// setTimeout(() => {
// for (var i = 0; i < 1000000000; i++) {}
// console.log('循环完了');
// }, 0);
事件发射器
var events = require("events");
var emitter = new events.EventEmitter();
// 指定事件监听方法
emitter.on("SomeEvent", function(argv1, argv2) {
console.log("listener1", argv1, argv2);
});
emitter.on("SomeEvent", function(argv1, argv2) {
console.log("listener2", argv1, argv2);
});
// 发射事件,多个事件监听方法都会被调用
emitter.emit("SomeEvent", "info", 1991);
文件
// 读文件
var fs = require('fs');
// 读取文件,第二个参数可以是回调函数,可以是文件的编码
fs.readFile('./1.png', function(error, data) {
if (error) {
console.log(error.stack);
return ;
}
console.log(data.toString('base64'));
});
// 同步的方式来读取文件
var content = fs.readFileSync(`./frames/${i}.txt`, 'utf8');
fs.readFile('./1.png', (error, data) => {
console.log(data.toString('base64'));
});
// =========
// ---------
// 写文件
const fs = require('fs');
fs.writeFile('./a.txt','he111llo');
HTTP服务器与客户端
获取GET参数
var url = require('url');
var util = require('util');
util.inspect(url.parse(req.url, true));
POST参数
var http = require('http');
var querystring = require('querystring');
var util = require('util');
http.createServer(function(req, res) {
var post = '';
req.on('data', function(chunk) {
post += chunk;
});
req.on('end', function() {
post = querystring.parse(post);
res.end(util.inspect(post));
});
}).listen(3000);
在 end 事件触发后,通过 querystring.parse 将 post 解析为真正的 POST 请求格式,然后向客户端返回。
【注意】 不要在真正的生产应用中使用上面这种简单的方法来获取 POST 请求,因为它有严重的效率问题和安全问题,这只是一个帮助你理解的示例。
返回数据
http.ServerResponse 是返回给客户端的信息,决定了用户最终能看到的结果。
http.ServerResponse 有三个重要的成员函数,用于返回响应头、响应内容以及结束请求。
response.writeHead(statusCode, [headers]):向请求的客户端发送响应头。
statusCode 是 HTTP 状态码,如 200 (请求成功)、404 (未找到)等。headers
是一个类似关联数组的对象,表示响应头的每个属性。该函数在一个请求内最多只
能调用一次,如果不调用,则会自动生成一个响应头。
response.write(data, [encoding]):向请求的客户端发送响应内容。data 是
一个 Buffer 或字符串,表示要发送的内容。如果 data 是字符串,那么需要指定
encoding 来说明它的编码方式,默认是 utf-8。在 response.end 调用之前,
response.write 可以被多次调用。
response.end([data], [encoding]):结束响应,告知客户端所有发送已经完
成。当所有要返回的内容发送完毕的时候,该函数 必须 被调用一次。它接受两个可
选参数,意义和 response.write 相同。如果不调用该函数,客户端将永远处于
等待状态。
http.createServer(function(req, res) {
// HTTP 协议响应头
res.writeHead(200, {'Content-Type': 'text/html'});
// 服务器返回的数据
res.write('<h1>nodejs</h1>');
// 数据发送结束
res.end();
http客户端
修改端口号:
GET 方式获取数据
var http = require('http');
http.get({host: 'www.baidu.com'}, function(res) {
res.setEncoding('utf8');
res.on('data', function (data) {
console.log(data);
});
});
POST的快捷方式
require的方式
port: 8080,
var options = {
host: 'www.baidu.com',
port: 8080,
path: '/,
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
'Content-Length' : contents.length
}
};
var req = http.request(options, function(res) {
res.setEncoding('utf8');
res.on('data', function (data) {
console.log(data);
});
});
req.write(contents);
req.end();