目次
2.1. fs はファイルを同期的に読み取ります fs.readFileSync()
2.2. fs はファイルを非同期で読み取ります fs.readFile()
2.3. ファイル内容の非同期書き込み fs.writeFile()
序文:
cmd ウィンドウを開き、node -vを使用してノードのバージョン (できれば 13 以降) を確認します。
cmd または統合ターミナルでプロジェクトを実行します:ノード xx.js
公式 Web サイトのドキュメント: https://nodejs.cn/api-v16/fs.html
1. パスモジュール
__dirnameは Node によって提供される特別な変数です。現在のファイルのパスを取得できます。
path.join() : 完全なパスを結合します
const path=require('path');//引入path模块,引入后才能使用对应的功能
console.log(__dirname);//__dirname是Node提供的特殊变量:可获取当前文件所在路径
//输出:C:\Users\hp\Desktop\node
let ret=path.join(__dirname,'hello.txt');//拼接出文件的完整路径(含文件名)
console.log(ret);
//输出:C:\Users\hp\Desktop\node\hello.txt
let ret2=path.join(__dirname,'modules','m1.js');//获取m1.js的路径
console.log(ret2);
//输出:C:\Users\hp\Desktop\node\modules\m1.js
2.fsモジュール
2.1. fs はファイルを同期的に読み取ります fs.readFileSync()
const fs=require('fs');//fs 文件操作系统
const path=require('path');
let filePath=path.join(__dirname,'hello.txt')
let content =fs.readFileSync(filePath,'utf8');//fs.readFileSync(文件路径)
// 输出:<Buffer e8 bf 99...> Buffer是Node在内存暂存数据的方式,需要加‘utf8’转码/结果.toString()
// 转码后输出:这是一个文本文件(hello.txt的内容)
console.log(content);
console.log('END--------');
2.2. fs はファイルを非同期で読み取ります fs.readFile()
const fs=require('fs');//fs 文件操作系统
const path=require('path');
let filePath=path.join(__dirname,'hello.txt')
fs.readFile(filePath,'utf8',(err,data)=>{
if(err){
console.log("err错误",err);
return
}
console.log("读取到的内容",data);//最后执行
// 输出:读取到的内容 这是一个文本文件
})
console.log('END--------');//先执行
2.3. ファイル内容の非同期書き込み fs.writeFile()
// 元々存在しない場合は追加、存在する場合は修正します。
fs.writeFile(filePath,'コンテンツの変更','utf8',err=>{
console.log("書き込みに成功しました!");// 操作が成功した後、ここでコードを実行します。
})
共有:
Sync: 同期 Async: 非同期
// 同期コード: 順番に実行されます
// 非同期コード:同期より遅い. 実行時は、順序に関係なく、速い方が最初に実行されます。
3.HTTPモジュール
これは、get、post などのバックエンド インターフェイスを作成するのと似ています。代わりに、より便利な Express バックエンド フレームワークを使用することもできます。
次のように: WEB サーバー プログラムを作成します。
const http=require('http');//1.引入http模块
// 2.定义一个端口号
const PORT=8081;
// 3.创建服务器对象,处理请求
// request:请求对象 response:响应对象
let server=http.createServer((request,response)=>{
console.log("有请求过来了!");//在浏览器端访问localhost:8081 会执行这里
response.setHeader('Content-Type','text/html;charset=utf-8');//设置响应头,防中文乱码
response.write("hello 朋友们!");//给浏览器作出响应
response.end();//结束本次响应
})
// 4.启动服务器,开启监听
server.listen(PORT,err=>{
console.log(`服务器已经启动在了${PORT}端口上`);
// 输出:服务器已经启动在了8081端口上
})
3.1. 中国語文字化け問題の解決
response.setHeader('Content-Type','text/html;charset=utf-8') ;//中国語の文字化けを防ぐためのレスポンスヘッダーを設定します
3.2. リクエストパスに従ってコンテンツをブラウザに返す
const http=require('http');
const fs=require('fs');
const path=require('path');
const PORT=8081;
let server=http.createServer((request,response)=>{
console.log("有请求过来了!",request.url);//首页的值为 /
response.setHeader('Content-Type','text/html;charset=utf-8');
if(request.url==='/'){ //http://localhost:8081
let filePath=path.join(__dirname,'html',"index.html");
let content=fs.readFileSync(filePath);
response.write(content);
}else if(request.url==='/list'){ //http://localhost:8081/list
let filePath=path.join(__dirname,'html',"list.html");
let content=fs.readFileSync(filePath);
response.write(content);
}else{
response.write("404页面!");
}
response.end();
})
server.listen(PORT,err=>{
console.log(`服务器已经启动在了${PORT}端口上`);
})
4. モジュール化
プロジェクトの下に新しいモジュールフォルダーを作成し、その中にエクスポートするモジュールファイルを書き込みます。
4.1. CommonJ のインポートとエクスポート
// データをエクスポートする (最初の構文)
輸出。a=a;
輸出。合計=合計;
輸出。Animal=動物。
// データをエクスポートする (2 番目の構文)
module.exports={a,sum,Animal};
インポート構文: const m1=require('./modules/m1') //モジュールをインポート
4.2. ES6のインポートとエクスポート
ES6の最初のエクスポート構文(定義しながらエクスポート、複数可)
オンデマンドでインポート: 'xx.mjs' から {} をインポートします
// ES6 の 2 番目のエクスポート構文 (1 つだけありえます)
デフォルトをエクスポート{
a、合計、動物
}
2 番目のインポートのタイプ: import m2 from './modules/m2.mjs'
知らせ:
Node が ES6 を使用してモジュールをインポートする場合、バージョンは 13,2+ である必要があります。
// サフィックス名を.mjsに変更する必要があります==>ノード xx.mjsを実行するだけです
5. グローバルとこれを理解する
グローバル: グローバルを通じて定義されたオブジェクトに直接アクセスできます。
this: 対話モード (cmd) では、this===global(true)
ノードインタープリターは、js コードを解釈するために使用されます (js はインタープリター言語です)。
ノード エンジンで js ファイルを解釈する場合、これはグローバル オブジェクトではなく、エクスポート オブジェクトを指します。
let a=10;
// console.log(window);//报错
// console.log(global);//全局对象global
// console.log(global.a);//undefined 全局下定义变量,并不会挂载到全局对象下
// global.b=20;
console.log(b);//20 通过global定义对象,可以直接访问
console.log(this===global);//false
// 了解this
console.log(this);//{}
exports.a=a;
console.log(this);//{a:10}
console.log(this===exports);//true
6. Sort() アプリケーション (配列のソート)
arr.sort(fn)、パラメーター サイズの並べ替え関数を追加しない場合、このメソッドはデフォルトで最初の要素のみをランク付けします。たとえば、100 は 2 の前にランク付けされます。
let arr = [100, 2, 4, 65, 3, 7, 8, 64];
let brr = [{ name: '11', age: 19 }, { name: '22', age: 17 }, { name: '33', age: 21 }]
console.log(arr.sort());//输出:[100, 2, 3, 4, 64, 65, 7, 8](只按第一位排序)
function fn(a, b) {
return a - b;//从小到大排序,反之也可
}
console.log(arr.sort(fn));//输出:[2, 3, 4, 7, 8, 64, 65, 100]
function fn2(a, b) {
return a.age - b.age;
}
console.log(brr.sort(fn2));//将数组里的每个对象排序