记录下Node中常用模块的api:
1.自定义模块:导出方法时exports理论上和module.exports是一样的,但是如果不同,以module.exports为准
2.读写文件模块:fs
1.读取文件:readFile(文件路径(相对/绝对)),编码,回调函数)
2.写入文件:writeFile(文件路径(相对/绝对)),编码,回调函数)
3.路径模块:path
1.当前文件的绝对路径:__dirname(全局变量,不依赖path模块)
2.名称拼接为路径:path.join(name1,name2,name3...) 为什么要使用此方法,是因为不同操作系统连接符不同,所以不要自行手动拼接
4.url模块:url
1.根据请求的url字符串获取到参数:url.parse(urlStr,isModel) 如果isModel为true,则会处理为对象返回,如果是false,则是字符串
5.querystring模块:querystring
1.将参数字符串转为参数对象k/v形式:querystring.parse(queryStr) 可以将url.parse(urlStr,false)的结果使用此方法再次转换为对象
6.mime模块:mime
1.根据请求的url获取到请求的文件类型:mime.parse 可以根据这个动态获取到请求类型,然后响应时写入到响应头中response.writeHead的content-type中
fs模块:
const fs = require('fs');
fs.readFile('./../1.moduleStudy/module-a.js', 'UTF-8', (error, doc) => {
console.log(error);
console.log(doc);
});
fs.writeFile('./testWriteFileByNode.txt', '这句话是通过node写入的', error => {
console.log('文件写入完毕!');
console.log(error);
});
path模块:
const path = require('path');
console.log(__dirname);
var filePath = path.join('firstFolder', 'secondFolder', 'thirdFolder', 'file.txt');
console.log(filePath);
url,querystring,mime模块以及使用node创建web服务器:
const http = require('http');
const url = require('url');
const queryString = require('querystring');
var app = http.createServer();
app.on('request', (request, response) => {
var resultMessage = '欢迎来到Lingbug的Node服务器!';
var { method, url: urlStr } = request;
var parameter = null;
if (method == 'GET') {
parameter = url.parse(urlStr, true);
console.log(parameter);
} else if (method == 'POST') {
var paraString = '';
request.on('data', paraStr => {
paraString += paraStr;
});
request.on('end', () => {
parameter = queryString.parse(paraString);
console.log(parameter);
});
} else {
resultMessage = '请求方式无法识别:' + method;
}
response.writeHead(200, {
'content-Type': 'text/html;charset=UTF-8'
});
response.end(resultMessage);
});
app.listen(83);
console.log('服务器启动成功!');
异步操作:async await,promise:
const util = require('util');
var promisifyFunc = util.promisify;
console.log(promisifyFunc);
var testAsyncService = {
sumAsync1: function(x, y) {
return new Promise((resolve, reject) => {
testAsyncService.sum(x, y, r => resolve(r));
});
},
sumAsync2: async function(x, y) {
// async返回的是promise对象
return x + y;
},
sum: function(x, y, callback) {
setTimeout(function() {
callback(x + y);
}, 5000);
},
run: async function() {
// 第一种方式:使用promise
// testAsyncService.sumAsync1(5, 6).then(r => {
// console.log("第一种方式" + r);
// });
// // 第二种方式:使用async关键字
// testAsyncService.sumAsync2(4, 5).then(r => {
// console.log("第二种方式" + r);
// });
// 第三种方式:使用promisify将回调函数的方法改为promise的异步方法
var newFunc = promisifyFunc(testAsyncService.sum);
console.log(newFunc);
var sum1 = await newFunc(1, 2);
console.log('sum1 = ' + sum3);
var sum2 = await newFunc(sum1, 3);
console.log('sum2 = ' + sum3);
var sum3 = await newFunc(sum2, 4);
console.log('sum3 = ' + sum3);
}
};
testAsyncService.run();
Ending~