node.js 응용 프로그램이 있고 서버가 수신을 시작하면 명령을 실행해야합니다. server.listen
에있는 문서는 다음과 같이 말합니다. server.listen(port, [hostname], [backlog], [callback])
하지만이 형식을 사용하려고하면 코드가 실행되지 않지만 오류 메시지가 나타나지 않습니다. 그래서 여기있다, 당신의 일부는 내 코드의 전체를 볼 요청Node.js server.listen 콜백?
var spawn = require('child_process').spawn
function listen(port) {
try {
server.listen(port, "localhost",511, function() {
spawn("open",["http://localhost:"+port+"/"])
})
} catch (e) {
listen(port+1)
}
}
:
var http = require("http"),
path = require("path"),
fs = require("fs"),
mime = require("mime"),
port = 1
var server = http.createServer(function(req, resp) {
if (req.url == "/action" && req.headers["command"]) {
resp.writeHead(200, {
"Content-Type": "text/plain"
});
console.log("Command sent: " + req.headers["command"])
try {
var out = eval(req.headers["command"])
if (typeof out == "object") {
var cache = [];
out = JSON.stringify(out, function(key, value) {
if (typeof value === 'object' && value !== null) {
if (cache.indexOf(value) !== -1) {
return "[Circular]";
}
// Store value in our collection
cache.push(value);
}
return value;
});
}
resp.end(out);
} catch (e) {
resp.end(e.stack)
}
}
var local = __dirname + "/public" + req.url
if (fs.existsSync(local)) {
if (fs.lstatSync(local).isDirectory(local)) {
if (fs.existsSync(local + "/index.html")) {
local += "/index.html"
resp.writeHead(200, {
"Content-Type": mime.lookup(local)
});
fs.readFile(local, function(err, data) {
if (err) {
resp.writeHead(500, {
"Content-Type": "text/plain"
});
resp.end("Internal server error");
throw err;
}
resp.end(data)
});
} else {
server.status_code = 403
resp.writeHead(403, {
"Content-Type": "text/plain"
});
resp.end("GET 403 " + http.STATUS_CODES[403] + " " + req.url + "\nThat Directory has no Index")
console.log("GET 403 " + http.STATUS_CODES[403] + " " + req.url)
}
} else {
resp.writeHead(200, {
"Content-Type": mime.lookup(local)
});
fs.readFile(local, function(err, data) {
if (err) {
resp.writeHead(500, {
"Content-Type": "text/plain"
});
resp.end("Internal server error");
throw err;
}
resp.end(data)
});
}
} else {
if (req.url != "/action") {
server.status_code = 404
resp.writeHead(404, {
"Content-Type": "text/plain"
});
resp.end("GET 404 " + http.STATUS_CODES[404] + " " + req.url + "\nThat File Cannot be found")
console.log("GET 404 " + http.STATUS_CODES[404] + " " + req.url)
}
}
});
var spawn = require('child_process').spawn
function listen(port) {
try {
server.listen(port, "localhost")
} catch (e) {
listen(port+1)
}
}
를 해결 여기 내 응용 프로그램의 듣기 부분이다 !
@mscdex와 Peter Lyons의 답변을 결합한 후에 문제를 해결했습니다.
var spawn = require('child_process').spawn
server.listen(0,"localhost", function(err) {
if(err) throw err;
spawn("open",["http://localhost:"+server.address().port+"/"])
})
여러분 모두에게 감사
당신이 읽고있는 문서,하지만
server.listen
의 공식 Node.js를 워드 프로세서
server.listen(port, [host], [callback])
을 말
나머지 코드를 게시 할 수 있습니까? 특히 처음에 '수신 대기'라고 부르는 부분이 있습니까? –
넵 .. 그리고 어디서 어떻게 서버가 정의 되었습니까? – zipzit
특정 포트에서 수신 대기 할 필요가 없으면 대신 '0'을 사용할 수 있습니다. 그런 다음 listen() 콜백 내부에서'server.address(). port'를 통해 지정된 포트를 가져올 수 있습니다. – mscdex