我有一个node.js应用程序,我需要在服务器开始侦听时运行命令。关于
但是当我尝试使用此格式时,代码没有运行,但是没有出现错误消息。 这是我的应用程序中的监听部分:
有些人要求查看我代码的全部内容,所以在这里:
server.listen
的文档如下:server.listen(port, [hostname], [backlog], [callback])
但是当我尝试使用此格式时,代码没有运行,但是没有出现错误消息。 这是我的应用程序中的监听部分:
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+"/"])
})
感谢你们两个
listen
的位置吗? - go-oleg0
。然后在listen()
回调函数中,可以通过server.address().port
获取分配的端口号。 - mscdex