導航:首頁 > 編程語言 > nodejs回調函數

nodejs回調函數

發布時間:2023-03-28 05:09:11

『壹』 什麼是js回調函數

回調函抄數就是某個函數執行完畢後執行的函數,沒什麼的啊。比如:
function(callback){
// 代碼
// 以上代碼執行完畢後執行回調函數
if(typeof callback === "function"){
callback();

}

}
這是因為js中函數可以當做參數直接傳遞進去。

『貳』 nodejs的回調函數里為什麼需要return

return可以中斷執行事務,在出現error時使用return可以避免繼續執行else判斷,優化處理,另外用return代碼結構更清晰,希望對你有用,

『叄』 nodejs內置模塊有哪些

一、Express框架

前面的章節已經介紹過了,可以使用npm來安裝node.js模塊。具體操作請參照以前寫的nodejs概論。

Express是一個nodejs的web開源框架,用於快速的搭建web項目。其主要集成了web的http伺服器的創建、靜態文本管理、伺服器URL地址請求處理、get和post請求處理分發、session處理等功能。

使用方法,在cmd中打開你所想創建web項目的路徑。然後輸入

Express appname

即可創建一個名為appname的web項目。控制台列印結果

在jada文件中是可以使用for循環和if判斷語句的,可以讓你體會類似JSP的<%%>和php的<php></php>在網頁上輸出數據的快感。

三、forever模塊

nodejs作為http伺服器,需要確保服務順利進行,要注意一下兩點:

1.後台服務運行,監控運行日誌,以及http運行日誌;

2.確保項目的正常安全運行,Node.js的啟動命令node,很大程度無法滿足運行需求;

Node.js的forever模塊在第二點就可以起到很大的作用,同時其擁有監控文件更改、自動重啟等功能。

forever模塊的使用方法有兩種:1.在命令行中使用

forever -l forever.log -o out.log -e err.log app.js
-l forever.log -o out.log -e err.log分別指定了forever的運行日誌,腳本流水日誌,腳本運行錯誤日誌,啟動後將在本文件夾下產生out.log、err.log文件。

2.在編碼中require forever模塊使用。

四、Socket.IO模塊

Socket.IO模塊主要功能是將WebSocket協議應用到所有瀏覽配廳器。主要用於實時的長連接多求情項目中。

例如:在線聯網游戲,實時聊天、實時股票查看、二維碼掃描登錄掘粗等。

安裝方法仍然是在cmd在中輸入npm install socket.io

如何使用Socket.IO來創建一個項目。

需要分別實現服務端和客戶端的邏輯:

先創建一個服務端的node.js腳本index_server.js

var app = require('http').createServer(handler)//創建伺服器app
, io = require('socket.io').listen(app)//引用socket.io模塊監聽app
, fs = require('fs')//引用文件處理模塊
app.listen(80);//指定app監聽的埠,第二個參數127.0.0.1可省略

function handler (req, res) {
fs.readFile(__dirname + '/index.html', function (err, data) { if (err) {
res.writeHead(500); return res.end('Error loading index.html');
}
res.writeHead(200);
res.end(data);
});
}

io.sockets.on('connection', function (socket) {
socket.emit('判賣鎮news', { hello: 'world' });
socket.on('my other event', function (data) {
console.log(data);
});
});

其中,socket.emit()為Socket發送消息的函數,第一個參數表示發送消息的key值,第二個參數為發送消息的內容,也就是發送的數據。

Socket。on()為Socket接收消息的函數,第一個參數為接收消息的可以值,第二個參數為回調函數,其中回調函數攜帶的參數為接收消息所發送的數據。

接下來web前端如何使用javaScrit 來連接Socket伺服器。

新建一個index_client.html

<script type="text/javascript" src="socket.js"></script>
<script type="text/javascript"> var socket = io.connect('http://localhost');//創建本地sock連接
socket.on('news',function (data) {//Socket接收news消息時執行回調函數 console.log(data);
socket.emit('my other event',{my:'data'});
});</script>

<script type="text/javascript" src="socket.js"></script>載入已經安裝好的Socket.io的本地JavaScrit文件。
var socket = io.connect('http://localhost');因為埠為80,所有這里可以不埠號
socket.on('news',function (data){}//客戶端接收news消息成功後,發送my other event消息到服務端,發送的消息內容為json對象{my:'data'}

接下來只需要運行服務端的index_server.js文件來啟動socket服務

效果:在瀏覽器輸入http://127.0.0.1按F12調出瀏覽器的控制台console即可看見列印出了一個object對象。

執行完畢後可能會報錯:catnot find mole socket.io,說明你的socket.IO沒有安裝,或已經安裝並配置為全局,但你的安裝路徑並沒有配置到在path中,所有無法引用。
你可以選擇配置path,或者安裝到項目內。這里建議安裝到你的項目目錄下,而不是簡單粗暴的配置為全局。先卸載npm uninstall socket.io 進入指定目錄後安裝node index_server.js

socket.io詳細請參閱 http://cnodejs.org/topic/50a1fcc7637ffa4155b5a264

五、request模塊

request模塊為開發者提供了一種簡單訪問HTTP請求的方法。request還支持HTTPS的訪問方法。

安裝:

npm install requset

request模塊基本上覆蓋了所有的HTTP請求方式如GET,POST,HEAD,DEL等。但其最基本的兩個方法是request.get()和request.post().

get和post的區別

get:

1.使用get向伺服器發出和接收的請求會附在url之後。類似:http://www..com?id=1221&name=5555這個url中傳遞了兩個參數,一個為id,一個為name。

2.get請求不能超過1024個位元組。

post沒有限制,也不會附在url上。

接下來做一個簡單的實例

get實例:

首先新建一個伺服器app_get.js

var http= require("http");
http.createServer(function(req,res){
res.writeHead(200,{'content-Type':'text/plain'});
res.end('Hello world '+req.method);
}).listen(1337,"127.0.0.1");

再建一個發送求情的request_get.js文件

var request=require('request');
request.get("http://127.0.0.1:1337",function(error,response,result){
console.log(result);
});

在CMD中運行app_get.js,運行成功後,再打開一個cmd(之前的cmd不要關閉),執行request_get.js文件。

執行後的結果如下

hello world
GET

可以看出,通過request.get方法訪問

http://127.0.0.1:1337 返回的結果就是res.end()的參數

post實例:
和上面一樣,先新建伺服器app_post.js

var http= require("http"),
querystring=require('querystring');
http.createServer(function(req,res){ var postData=""; //開始非同步接收客戶端post的數據
req.addListener("data",function (postDataChunk) {
postData += postDataChunk;
}); //非同步post數據接收完畢後執行匿名回調函數
req.addListener("end",function(){ var postStr=JSON.stringify(querystring.parse(postData));
res.writeHead(200,{'content-Type':'text/plain'});
res.end(postStr+' '+req.method);
});
}).listen(1400,"127.0.0.1");

然後再新建一個request_post.js

var request=require("request");
request.post('http://127.0.0.1:1400',{form:{'name':'ermu','book':'node.js'}},function (error,response,result) {
console.log(result);
})

像上面一樣在cmd中執行後顯示的結果如下:

D: odejssrc equest>node request_post.js
{"name":"ermu","book":"node.js"}
POST

request post提交了一個json對象{"name":"ermu","book":"node.js"}而伺服器接通過獲取該POST數據,然後返回客戶端,同時將http請求方式也響應到客戶端。

request post參數可以有兩種傳遞方式。

其中,第一種是將url和form表單的數據作為json參數在request post傳遞。舉例如下:

request.post('url':'http://127.0.0.1:1400',form:{'name':'ermu','book':'node.js'}},function (error,response,result) {
console.log(result);
})

另一種是將url和form作為兩個參數,上面的實例就是使用這種方法。

六、 Formidable模塊

該模塊的目的是為了解決文件上傳。

在原生的node.js模塊中,提供了獲取post數據的方法,但是並沒有直接獲取上傳文件。

『肆』 nodejs刪除安卓手機指定文件

nodejs刪除安卓手機指定文件
* 刪除目錄下 指定 文件方法
* 參數: dir 文件夾名稱
* fs.stat => 判斷是文件還是文件夾
* fs.unlink => 刪除文件
* fs.readdir => 讀取文件夾內容
*/

const fs = require('fs')
const path = require('path')

const deleteFiles = function (dir) {
fs.readdir(dir, function (err, files) {
files.forEach(function (filename) {
var src = path.join(dir, filename)
fs.stat(src, function (err, st) {
if (err) {
throw err
}
// 判斷是否為文件
if (st.isFile()) {
// 這里可以使用正則,也可以使用其他方法,比如字元串處理等,/\.d\.ts$/
if (/\.we$/.test(filename)) {
fs.unlink(src, err => {
if (err) throw err

console.log('成功刪除:' + src)
})
}
} else {
// 遞歸文件夾
deleteFiles(src)
}
})
})
})
}

deleteFiles('./')
復制代碼

修改文件名稱

復制代碼
fs = require('fs') // 引用文件系統模塊

const PATH = `./src/` // 當前文件夾

const readFileList = function (path, filesList) {
filesList = filesList || []
let files = fs.readdirSync(path)
files.forEach(function (filename, index) {
// const stat = fs.statSync(path + filename); //讀取的文件信息

// isDirectory 判斷是不是目錄
if (fs.statSync(path + filename).isDirectory()) {
// 遞歸讀取文件
readFileList(`${path}${filename}/`, filesList)
} else {
filesList.push({
path, // 路徑
filename // 名字
})
}
})
return filesList
}
// 修改文件名稱
const rename = function (oldPath, newPath, filename, newSuffixFile) {
fs.rename(oldPath, newPath, function (err) {
if (err) {
throw err
}
console.log(`${filename} 修改為 => ${newSuffixFile}`)
})
}
// 批量修改文件名稱
const getChangeFiles = function (path, oldSuffix, newSuffix) {
if (!oldSuffix && !newSuffix) {
console.log(`後綴未設置`)
}
this.readFileList(path).forEach(item => {
if (item.filename.indexOf(oldSuffix) > -1) {
console.log(item.filename)
let oldPath = item.path + item.filename,
newSuffixFile = item.filename.split(oldSuffix)[0] + newSuffix,
newPath = item.path + newSuffixFile
rename(oldPath, newPath, item.filename, newSuffixFile)
}
})
}

getChangeFiles(PATH, `.we`, `.js`)

// 引入fs文件處理模塊
const fs = require('fs')
// 現在我們要關心的是『icons『文件夾
// 我們不妨用變數表示這個文件夾名稱,方便日後維護和管理
const src = 'dist'

// API文檔中中找到遍歷文件夾的API
// 找到了,是fs.readdir(path, callback)
// 文檔中有敘述:
// 讀取 path 路徑所在目錄的內容。 回調函數 (callback) 接受兩個參數 (err, files) 其中 files 是一個存儲目錄中所包含的文件名稱的數組
// 因此:
fs.readdir(src, function (err, files) {
// files是名稱數組,因此
// 可以使用forEach遍歷哈, 此處為ES5 JS一點知識
// 如果不清楚,也可以使用for循環哈
files.forEach(function (filename) {
// 下面就是文件名稱重命名
// API文檔中找到重命名的API,如下
// fs.rename(oldPath, newPath, callback)
// 下面,我們就可以依葫蘆畫瓢,確定新舊文件名稱:
const oldPath = src + '/' + filename
// newPath = src + 『/『 + filename.replace(/_/g, 『-『);
const newPath = src + '/' + 'index.html'
if (filename === 'Homepad.html') {
// 重命名走起
fs.rename(oldPath, newPath, function (err) {
if (!err) {
console.log(filename + '重命名成功!')
}
})
}
})
})

復制代碼

『伍』 nodejs非同步回調函數中this問題,求助

this關鍵字指向調用它的對象,test()是在GLOBAL中調用,而且非同步函數回調應該形成了閉包,回回調函數中答的this也應該指向GLOBAL對象,而至於為啥this.vall是undefined,則是因為用var申明的變數都是局部變數,並不是GLOBAL變數的屬性。

好好去看看javascript中this關鍵字指的對象和閉包的概念吧。希望能幫到你

『陸』 nodejs里的cb是什麼意思

cb的在js中是call-back 也就是回調函數的縮寫。call-back function 縮寫為cb

『柒』 nodejs——定時器

JavaScript中可以實現定時器功能的有兩個函數——setTimeout和setInterval,二者的不同是setTimeout只執行一次,而setInterval是以指定的時間間隔重復執行。setTimeout可以使用clearTimeout取消,setInterval可以使用clearInterval取消。

有時,我們會用setTimeout(callback,0)將任務推遲一段很短的時間,但是其實通過process.nextTick(callback)來實現會更好,因為Node中的事件循環在一個處理事件隊列的循環里運行,每循環一次稱為一個「tick」。使用process.nextTick(callback)回調函數會在事件隊列內所有事件處理完畢後,會在下次事件循環之前被調用,即進入下個event loop前執行;而setTimeout(callback,0)把回調延遲到後面的某個event loop執行,具體由設置的延時時間和event loop的執行時間決定。

這樣可以保證my_async_function函數是順序執行。

閱讀全文

與nodejs回調函數相關的資料

熱點內容
maya粒子表達式教程 瀏覽:84
抖音小視頻如何掛app 瀏覽:283
cad怎麼設置替補文件 瀏覽:790
win10啟動文件是空的 瀏覽:397
jk網站有哪些 瀏覽:134
學編程和3d哪個更好 瀏覽:932
win10移動硬碟文件無法打開 瀏覽:385
文件名是亂碼還刪不掉 瀏覽:643
蘋果鍵盤怎麼打開任務管理器 瀏覽:437
手機桌面文件名字大全 瀏覽:334
tplink默認無線密碼是多少 瀏覽:33
ipaddgm文件 瀏覽:99
lua語言編程用哪個平台 瀏覽:272
政采雲如何導出pdf投標文件 瀏覽:529
php獲取postjson數據 瀏覽:551
javatimetask 瀏覽:16
編程的話要什麼證件 瀏覽:94
錢脈通微信多開 瀏覽:878
中學生學編程哪個培訓機構好 瀏覽:852
榮耀路由TV設置文件共享錯誤 瀏覽:525

友情鏈接