2014-04-24 11 views
-1

我想在Openshift上部署一個簡單的node.js應用程序,但我根本無法讓它運行。我的package.json是:無法使用Openshift創建node.js網絡服務器。對象#<Object>沒有方法'聽'

{ 
    "name": "songcatapp", 
    "version": "1.0.0", 

    "engines": { 
    "node": ">= 0.6.0", 
    "npm": ">= 1.0.0" 
    }, 

    "dependencies": { 
    "colors": "0.x.x", 
    "optimist": "0.2.x", 
    "pkginfo": "0.2.x", 
    "http-proxy": "0.7.3", 
    "htmlparser": "1.7.3", 
    "mongodb": "0.9.7-0", 
    "ent": "0.x.x" 
    }, 
    "devDependencies": {}, 
    "bundleDependencies": [], 

    "private": true, 

    "scripts": { 
    "start": "node server.js" 
    }, 
    "main": "server.js" 
} 

我server.js是:

var server_port = process.env.OPENSHIFT_NODEJS_PORT || 8080 
var server_ip_address = process.env.OPENSHIFT_NODEJS_IP || '127.0.0.1' 

console.log("ServerPort: "+server_port+", ServerIP: "+server_ip_address); 

http.createServer(function(request, response) { 
    response.writeHead(200); 
    response.end('Hello Http'); 
}); 
console.log("http: %j", http); 
http.listen(server_port, server_ip_address, function() { 
    console.log("Listening on " + server_ip_address + ", server_port " + port) 
}); 

在應用程序啓動時,我得到的錯誤是:

http.listen(server_port, server_ip_address, function() { 
    ^
TypeError: Object #<Object> has no method 'listen' 
    at Object.<anonymous> (/var/lib/openshift/53520a0be0b8cd914a000187/app-root/runtime/repo/server.js:578:6) 

我已經從上部署的應用程序DotCloud和亞馬遜沒有任何問題。我一直被困在Openshift一兩天了!

任何人都可以請幫忙嗎?

非常感謝

+0

你可以試試這樣說: http.createServer(函數(請求,響應){ response.writeHead(200); 到Response.End( '你好HTTP');} )聽(SERVER_PORT) ; – user3241019

+0

謝謝,但多數民衆贊成沒有什麼不同,並沒有解釋爲什麼HTTP對象似乎是錯誤的對象類型 – peetj

回答

2

http.createServer()創建並返回一個服務器實例對象,該實例就是對服務器的方法,如listen()

var server = http.createServer(function(request, response) { 
    response.writeHead(200); 
    response.end('Hello Http'); 
}); 
server.listen(server_port, server_ip_address, function() { 
    console.log("Listening on " + server_ip_address + ", server_port " + port) 
}); 
+0

當然,但爲什麼HTTP對象沒有'聽'方法?我認爲這與依賴關係/包更相關,但我目前無法找到最新的信息。 – peetj

+1

'http'只是一個單例對象,用於導出不同的方法來創建服務器,啓動客戶端請求等。因此,如果存在'http.listen()',則不會有服務器上下文。這對https服務器來說尤其是問題,因爲當你調用'https.createServer()'時,你必須傳遞證書和密鑰的配置等。我希望這是有道理的。 – mscdex

+0

我很樂意說,但它不會 - 對不起! – peetj

0

它看起來並不像加載了http模塊。

另外,我覺得你要創建一個server,然後調用server.listen,也許這兩種說法鏈在一起,就像這樣:

var http = require('http') 
var server_port = process.env.OPENSHIFT_NODEJS_PORT || 8080 
var server_ip_address = process.env.OPENSHIFT_NODEJS_IP || '127.0.0.1' 

http.createServer(function(request, response) { 
    response.writeHead(200); 
    response.end('Hello Http'); 
}).listen(server_port, server_ip_address, function() { 
    console.log("Listening on " + server_ip_address + ", server_port " + server_port) 
}); 

請問您的代碼在本地與運行「故宮安裝」之後「npm開始」?

相關問題