간단한 문제가 있습니다. 현재 요청이 응답을 끝내고 새로운 요청이 모두 거부되도록 expressjs nodejs 서버를 종료하려고합니다. 이해하기 쉽도록 코드를 정리했습니다.노드의 정상적인 종료는 작동하지 않습니다.
express = require("express")
http = require("http")
app = express()
app.configure ->
app.set "port", process.env.PORT or 3000
app.use app.router
ran = false
app.get '/testrun', (req, res)->
console.log "received request"
if ran
res.json
shouldnt: 'have gotten here'
else
ran = true
setTimeout ->
res.json
response: 'fail!'
, 8000
console.log 'server closing'
server.close()
setTimeout ->
process.exit()
, 10000
server = http.createServer(app)
server.listen app.get("port"), ->
console.log "Express server listening on port " + app.get("port")
기본적으로 두 가지 요청을합니다. 첫 번째 작업에는 8 초가 걸리고 서버는 즉시 닫힙니다. 따라서 향후 요청은 거부되어야합니다. 그러나 두 번째 요청은 여전히 처리됩니다. 콘솔 출력 :
$> Express server listening on port 3000
received request
server closing
received request
당신이 무슨 일이 일어나는지 설명 할 수 있으면 감사하겠습니다.
는 UPDATE :
당 벤자민의 반응은, 나는 그가 제시 한 테스트 코드를했는데, 예상대로 일했다. 문제는 브라우저입니다.
express = require("express")
http = require("http")
app = express()
app.configure ->
app.set "port", process.env.PORT or 3000
app.use app.router
ran = false
app.get '/testrun', (req, res)->
console.log "received request"
if ran
res.json
shouldnt: 'have gotten here'
else
ran = true
setTimeout ->
res.json
response: 'fail!'
, 5000
console.log 'server closing' # changes here
server.close ->
console.log 'closed!'
server = http.createServer(app)
server.listen app.get("port"), ->
console.log "Express server listening on port " + app.get("port")
server.close와 관련된 변경 사항에 유의하십시오. 내가 베냐민 제안 된 테스트 코드를 실행하면 예상 출력을 얻을 :
$>Express server listening on port 3000
received request
server closing
closed!
을하지만 크롬에서 두 개의 탭을 열 때, 첫 번째 요청, 몇 초 정도 기다린 다음 두 번째 요청,이 출력을 얻을 :
$>Express server listening on port 3000
received request
server closing
received request
그리고 process.exit없이
은 '폐쇄'콜백 결코를 호출된다. 이상한 행동의 종류.도움 주셔서 감사합니다.
아주 좋은 대답이지만,별로 없습니다. 편집을 참조하십시오. – yourdeveloperfriend