[英]Node.js server.listen callback?
I have a node.js application and I need to run a command once the server starts listening. 我有一个node.js应用程序,一旦服务器开始侦听,我需要运行一个命令。 The docs on server.listen
say: server.listen
上的文档说:
server.listen(port, [hostname], [backlog], [callback])
but when I try to use this format, the code is not run, but no error messages are appearing. 但是当我尝试使用这种格式时,代码没有运行,但是没有错误消息出现。 Here is the listening part of my application: 这是我的应用程序的侦听部分:
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) } }
After combining the answers of both @mscdex and Peter Lyons I have solved the problem. 结合@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+"/"]) })
Thank you to both of you 谢谢你们俩
var spawn = require('child_process').spawn
function listen(port) {
//Don't need try/catch here as this is an asynchronous call
server.listen(port, "localhost", function(error) {
if (error) {
console.error("Unable to listen on port", port, error);
listen(port + 1);
return;
}
spawn("open",["http://localhost:"+port+"/"])
}
server.listen
say server.listen(port, [host], [callback])
. 不确定要阅读的文档是什么,但是server.listen
的官方node.js文档说server.listen(port, [host], [callback])
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.