我遇到問題,並且在解決這些問題時我感覺不到我的深度。使用Node.js獲取請求時發生嵌套的HTTP錯誤
一,我對Node的理解是很新/不成熟的,兩個我對http的理解並不是最強的。
所以這裏出來給社區一些有希望的幫助。
我已經審查了我的代碼,首先通過使用靜態類型的對象數組抽象它的意圖,並運行它瀏覽器端以確保所有工作正常(缺少http.get請求)。
我已經將相同的代碼移到了節點服務器端,並使用與本地使用的相同的抽象數據集成功運行,並且所有工作都正常(主端口3030實例)。
然後我開始介紹一個稍微複雜一點的http.get。
說明:
一切,我做我的本地機器上正在發生的事情進行測試/非生產狀態發展。
在這情況下,我最終從我的本地機器上的端口3030執行http.get請求和呼叫到節點的另一個實例(CMD.EXE上的一個單獨的實例中運行)聽在端口3000
我測試過3000在其自己的瀏覽器,它是按預期工作:
我火了鉻,轉到HTTP://:3000 /彎/ 1,它返回我爲它設置的內容(它對URL中提供的最後一個值運行SQL select語句,並返回一個JSON.stringify(obj)ba ck到瀏覽器 - 見下圖)。
然後我點我的瀏覽器中輸入http://:3030,並獲得:
Server Started on Port 3030...
TypeError: listener must be a function
at TypeError (native)
at ClientRequest.once (events.js:190:11)
at new ClientRequest (_http_client.js:93:10)
at Object.exports.request (http.js:49:10)
at Object.exports.get (http.js:53:21)
at getBendAndTypeByBend (<<MyPort3030Root>>\program.js:26:9)
at p_processBends (<<MyPort3030Root>>\program.js:58:14)
at doAll (<<MyPort3030Root>>\program.js:74:3)
at <<MyPort3030Root>>\program.js:82:2
at Layer.handle [as handle_request] (<<MyPort3030Root>>\node_modules\express\lib\router\layer.js:95:5)
我將高興地顯示代碼,但我不知道哪一段是真需要解決問題,因爲當沒有HTTP.GET請求時,那麼每個請求都可以正常運行。
我只是不知道現在是哪一種方式,我希望這裏的某個人能幫助我理解從哪裏開始理解問題,但最終如何解決問題。
我知道這可能會問很多,但我真的覺得這個問題很困難,因爲事情似乎在工作,直到我把它們連接在一起。
這裏正在從端口稱爲可疑代碼片段:3030
http = require('http');
fs = require('fs');
async = require('async');
q = require('q');
express = require('express');
app = express();
bends = [
{"bend" : "1", "type" : ""},
{"bend" : "2", "type" : ""},
{"bend" : "7", "type" : ""},
{"bend" : "14", "type" : ""},
{"bend" : "33", "type" : ""},
{"bend" : "48", "type" : ""},
{"bend" : "73", "type" : ""},
{"bend" : "82", "type" : ""}
];
function getBendAndTypeByBend(bendStr) {
result = {"bend" : "", "type" : "", "status" : "false"};
for (var i=0;i<bends.length;i++) {
http.get('http://localhost:3000/bend/'+bendStr, 'utf-8', function(err, res) {
if (err) {
console.log(err);
}
res.on('end', function(err, res1) {
result.bend = bendStr;
result.type = JSON.parse(res).row;
if(i == bends.length-1) {
result.status = "true";
return result;
} else {
result.status = "false";
}
})
});*/
}
}
function p_initTables() {
bt1 = bends.slice();//(b)end(t)able1
return bt1;
}
function p_processBends(btArr) {
localbt = btArr.slice();
//console.log(localbt);
newbt = [];
for(var i=0;i<localbt.length;i++){
newbt.push(
{
"bend" : localbt[i].bend,
"type" : getBendAndTypeByBend(localbt[i].bend).type
}
);
}
return newbt;
}
function p_renderBendTableToUser(bt) {
for(var i=0;i<bt.length;i++) {
console.log("BEND: "+bt[i].bend + " | TYPE: "+bt[i].type+"\n");
}
return console.log("\ndone");
}
function doAll() {
p_renderBendTableToUser(
p_processBends(
p_initTables()
)
);
return 1;
}
app.get('/', function() {
doAll();
});
app.listen(3030, function(err, res){
if (err) {
return console.error(err);
}
console.log('Server Started on Port 3030...');
});
app.listen(3030, function(err, res){
if (err) {
return console.error(err);
}
console.log('Server Started on Port 3030...');
});
這裏是被稱爲運行@ PORT代碼:3000
var express = require('express');
var sql = require('sqlite3');
app = express();
app.get('/bend/:id', function(req, res){
var db = new sql.Database('<mySQLite3Path>/rebarFabTypes.db');
db.get("SELECT bend, type FROM fabtype WHERE bend = '"+req.params.id+"'", function(err, row) {
if (typeof row !== 'undefined') {
console.log(row.type);
res.end(JSON.stringify({"row" : row.type}));
} else {
res.end(JSON.stringify({"row" : "UNKNOWN"}));
}
});
db.close();
});
app.listen(3000, function(err, resp){
console.log('Server Started on Port 3000...');
});
讀這讓我覺得我再次回到學校..停下來..併發布錯誤發生腳本的一些代碼。 – Gntem
@ Mr.Phoenix好的,我會發布雙方,以便你可以看到發生了什麼。 –
嗯..如果你想從一個服務器向另一個服務器發送一個http請求請求,那麼這兩個腳本都會有很多錯誤的事情發生。也請嘗試閱讀一些快速教程,並始終使用文檔。 NodeJS和http模塊不是「不成熟」或「弱」的。 – Gntem