導航:首頁 > 編程語言 > js302報錯

js302報錯

發布時間:2023-10-19 17:50:10

A. 302是什麼錯誤

HTTP響應狀態碼302並不是一個錯誤代碼,302代表的意思其實是URL重定向,即是將當前連接訪問的URL重定向到新的URL。那如何得知新的URL呢,新的URL記錄在在HTTP響應Headers(HTTP響應首部)裡面,302響應首部中有一個Location欄位中,將Location欄位的內容提取出來,然後再訪問這個URL就可以了。

B. 如何人處理 302 node js

Nodejs最大的亮點就在於事件驅動, 非阻塞I/O 模型,這使得Nodejs具有很強的並發處理能力,非常適合編寫網路應用。在Nodejs中大部分的I/O操作幾乎都是非同步的,也就是我們處理I/O的操作結果基本上都需要在回調函數中處理,比如下面的這個讀取文件內容的函數:

復制代碼代碼如下:

fs.readFile('/etc/passwd', function (err, data) {
if (err) throw err;
console.log(data);
});

那,我們讀取兩個文件,將這兩個文件的內容合並到一起處理怎麼辦呢?大多數接觸js不久的人可能會這么干:

復制代碼代碼如下:

fs.readFile('/etc/passwd', function (err, data) {
if (err) throw err;
fs.readFile('/etc/passwd2', function (err, data2) {
if (err) throw err;
// 在這里處理data和data2的數據
});
});

那要是處理多個類似的場景,豈不是回調函數一層層的嵌套啊,這就是大家常說的回調金字塔或回調地獄(http://callbackhell.com/)的問題,也是讓js小白最為頭疼的問題。
這種層層嵌套的代碼給開發帶來了很多問題,主要體現在:
1.代碼可能性變差
2.調試困難
3.出現異常後難以排查
本文主要是介紹如何優雅的處理以上非同步回調問題。
初級方案:通過遞歸處理非同步回調
我們可以使用遞歸作為代碼的執行控制工具。把需要執行的操作封裝到一個函數中,在回調函數中通過遞歸調用控制代碼的執行流程,廢話不多說,上個代碼吧:

復制代碼代碼如下:

var fs = require('fs');
// 要處理的文件列表
var files = ['file1', 'file2', 'file3'];

function parseFile () {
if (files.length == 0) {
return;
}
var file = files.shift();
fs.readFile(file, function (err, data) {
// 這里處理文件數據
parseFile(); // 處理完畢後,通過遞歸調用處理下一個文件
});
}
// 開始處理
parseFile();

以上代碼已依次處理數組中的文件為例,介紹了通過遞歸的方式控制代碼的執行流程。
應用到一些簡單的場景中還是不錯的,比如:我們將一個數組中的數據,依次保存到資料庫中就可以採用這種方式。
通過遞歸的方式可以解決一些簡單的非同步回調問題。不過對於處理復雜的非同步回調還是顯得有些無能為力(如需要同步多個非同步操作的結果)。
華麗點:採用Async、Q、Promise等第三方庫處理非同步回調
為了更好的處理嵌套回調的問題,可以考慮採用一些第三方專門處理非同步的庫,當然有能力的完全可以自己寫個非同步處理的輔助工具。
比較常用的處理非同步的庫有:async,q還有promise。從npmjs.org網站上來看,async的火熱程度最高。以前用過async,確實也挺方便的,各種非同步處理的控制流實現的也挺好。
我們將最初的同時讀取兩個文件的代碼使用async處理下,示例如下:

復制代碼代碼如下:

var async = require('async')
, fs = require('fs');

async.parallel([
function(callback){
fs.readFile('/etc/passwd', function (err, data) {
if (err) callback(err);
callback(null, data);
});
},
function(callback){
fs.readFile('/etc/passwd2', function (err, data2) {
if (err) callback(err);
callback(null, data2);
});
}
],
function(err, results){
// 在這里處理data和data2的數據,每個文件的內容從results中獲取
});

通過async模塊,可以很好的控制非同步的執行流程了,也算是解決了層層回調的問題,代碼比以前算是清晰了些,不過依舊還是離不開回調函數。
想想如果能夠在不使用回調函數的情況下,處理非同步,豈不是很爽,接下來,我們談談使用ES6的新特性來實現這一目標。
優雅點:擁抱ES6,替代回調函數,解決回調地獄問題
話說EcmaScript Harmony (ES6)給js引入了不少新特性,對ES6不太了解的同學,可以自行網路一下。
在nodejs中使用ES6的新特性,需要用v0.11.x以上的版本才行。
本文介紹的是使用Generator特性替代回調函數,對Generator不了解?可以看看這里。
這里用到了co和thunkify兩個模塊,大家使用npm install命令安裝之。
還是以本文剛開始提到的問題為例,使用generator特性的實例代碼如下:

復制代碼代碼如下:

var fs = require('fs')
, co = require('co')
, thunkify = require('thunkify');

var readFile = thunkify(fs.readFile);
co(function *() {
var test1 = yield readFile('test1.txt');
var test2 = yield readFile('test2.txt');
var test = test1.toString() + test2.toString();
console.log(test);
})();

處理代碼中的異常也是很簡單的,只需要這樣就OK了:

復制代碼代碼如下:

try {
var test1 = yield readFile('test1.txt');
} catch (e) {
// 在這里處理異常
}

這種代碼是不是優雅很多了?像寫同步代碼一樣處理非同步,是不是很爽!
nodejs領域中進行Web開發,最火的框架莫過於express了,值得一提的是express的核心成員TJ大神有領導了一個新的Web框架——koa,宣稱是下一代的Web開發框架,koa真是藉助了ES6的generator這一特性,讓我們在開發Web系統的時候避免陷入層層的回調用。

閱讀全文

與js302報錯相關的資料

熱點內容
java將數字轉換成字母 瀏覽:854
c盤中的哪些是系統文件夾 瀏覽:668
分布式服務如何跨庫統計數據 瀏覽:829
力控轉發數據客戶端模式如何建立 瀏覽:200
怎麼樣讓自己的網站不被別人看到 瀏覽:711
編程擴展效果如何 瀏覽:335
榮耀暢玩手環同步qq 瀏覽:475
怎麼向sql中添加資料庫 瀏覽:596
錄歌失敗重啟app什麼意思 瀏覽:522
壓縮文件包怎麼在微信發送 瀏覽:432
mysql資料庫怎麼插入時間值 瀏覽:191
微信視頻不能轉發朋友圈 瀏覽:596
影視後期的app有哪些 瀏覽:956
電子保單數據出錯什麼意思 瀏覽:368
如何以文件下載音樂 瀏覽:438
計算機網路章節練習 瀏覽:999
單片機的外部中斷程序 瀏覽:48
表格批量更名找不到指定文件 瀏覽:869
js的elseif 瀏覽:584
3dmaxvray視頻教程 瀏覽:905

友情鏈接