概念:fs模塊是文件操做模塊,fs是 FileSystem的簡寫。它用來對文件,文件夾進行操做。javascript
// 引入模塊。
// 可使用var、let,可是建議使用const,由於咱們不但願它被改變
const fs = require('fs');
複製代碼
全部的文件操做系統都是具備同步和異步的形式:html
const fs = require('fs');
fs.unlink('/tmp/hello', (err) => {
if (err) throw err;
console.log('已成功刪除 /tmp/hello');
});
複製代碼
const fs = require('fs');
try {
fs.unlinkSync('/tmp/hello');
console.log('已成功刪除 /tmp/hello');
} catch (err) {
// 處理錯誤
}
複製代碼
fs.rename('/tmp/hello', '/tmp/world', (err) => {
if (err) throw err;
console.log('重命名完成');
});
fs.stat('/tmp/world', (err, stats) => {
if (err) throw err;
console.log(`文件屬性: ${JSON.stringify(stats)}`);
});
複製代碼
fs.rename('/tmp/hello', '/tmp/world', (err) => {
if (err) throw err;
fs.stat('/tmp/world', (err, stats) => {
if (err) throw err;
console.log(`文件屬性: ${JSON.stringify(stats)}`);
});
});
複製代碼
$ cat script.js
function bad() {
require('fs').readFile('/');
}
bad();
$ env NODE_DEBUG=fs node script.js
fs.js:88
throw backtrace;
^
Error: EISDIR: illegal operation on a directory, read
<stack trace.>
複製代碼
異步格式:java
fs.readFile('文件路徑'[,選項], (err, data) => {
if (err) throw err;
console.log(data);
});
複製代碼
說明:node
const fs = require("fs")
fs.readFile('文件路徑',"utf8", (err, data) => {
if (err) throw err;
console.log(data);
});
複製代碼
同步格式: 與異步格式不一樣在於:api
const fs = require("fs")
let rs = fs.readFileSync('文件路徑',"utf8");
console.log(rs)
複製代碼
覆蓋寫入 writeFile瀏覽器
功能:向指定文件中寫入字符串(覆蓋寫入), 若是沒有該文件則嘗試建立該文件。它把把文件中的內容所有刪除,再填入新的內容。bash
格式:fs.writeFile(var1, var2, var3, var4);服務器
參數1: 要寫入的文件路徑 --- 相對路徑和絕對路徑都可,推薦使用絕對路徑app
參數2: 要寫入文件的字符串異步
參數3: 配置項,設置寫入的字符集,默認utf-8
參數4: 寫入完成後觸發的回調函數,有一個參數 --- err (錯誤對象)
const fs = require('fs')
fs.writeFile('./a.txt', 'hello world niahi \n asfsdf', err => {
if (err) {
console.info(err)
throw err
}
})
複製代碼
功能 :向指定文件中寫入字符串(追加寫入), 若是沒有該文件則嘗試建立該文件
格式:fs.appendFile(var1, var2, var3, var4);
參數1: 要寫入的文件路徑 --- 相對路徑和絕對路徑都可,推薦使用絕對路徑
參數2: 要寫入文件的字符串
參數3: 配置項,設置寫入的字符集,默認utf-8
參數4: 寫入完成後觸發的回調函數,有一個參數 --- err (錯誤對象)
const fs = require('fs')
fs.appendFile('./a.txt', '\n 爲天地立命', err => {
if (err) {
console.info(err)
throw err
}
})
複製代碼
在讀取文件時,寫相對路徑是容易出問題的。
解決方法,就是在操做文件時,使用絕對路徑來定位文件。 __dirname __filename 獲取絕對路徑
絕對路徑: 從磁盤根目錄開始到指定文件的路徑。
相對路徑:是以某個文件的位置爲起點,相對於這個位置來找另外一個文件。
nodejs中提供了兩個全局變量來獲取獲取絕對路徑:
它是一個核心模塊,用來處理路徑問題:拼接,分析,取後綴名。
快速搭建服務器:
// http.js
// 引入核心模塊http
const http = require('http');
// 建立服務
const server = http.createServer(function(req, res) {
console.log(req.connection.remoteAddress);
res.end('hello world');
});
// 啓動服務
server.listen(8081, function() {
console.log('success');
});
複製代碼
// 建立服務
const server = http.createServer((req, res) => {
console.log(req.connection.remoteAddress);
res.end('hello world');
});
複製代碼
其中的參數是一個函數,這個函數是一個匿名函數,這個函數充當回調函數的角色,當有http請求時,它會自動被調用。
這個回調函數有它有兩個參數。這兩個參數很是重要,也很是複雜.
做用:url模塊用來對url(例如:itcast.cn:80/schools/stu…
步驟:
let urlobj = url.parse(req.url); // urlobj對象中,就有咱們須要的信息
urlobj.pathname :獲取用戶輸入的url的路徑名 ('/schools/students')
urlobj.search: '?id=18&name=zs',
urlobj.query: 獲取用戶輸入的url中的查詢字符串( 'id=18&name=zs' )
urlobj.path: '/schools/students?id=18&name=zs',
urlobj.href: '/schools/students?id=18&name=zs'
複製代碼
上面urlobj.query只是得到了傳遞的所有參數,咱們通常還需從地址欄中分析傳遞的數據。即從 itcast.cn:80/schools/stu…
用來對url中的查詢字符串這部分進行處理。nodejs中提供了querystring這個核心模塊來幫助咱們處理這個需求。
const qs= require('querystring');
let obj = qs.parse('id=18&name=zs');
console.log(obj)
複製代碼