내 server.js는 php.phpServer에게 3 PARAM으로 응답 모든 요청을 호출자바 스크립트
// server.js - the outer server loop
var http = require('http')
, php = require("./phpServer");
function start() {
function onRequest(request, response) {
php.phpServer('D:/websites/coachmaster.co.uk/htdocs',request, response);
response.write('Ending');
response.end();
}
http.createServer(onRequest).listen(80);
console.log("Server started.");
}
exports.start = start;
입니다.
phpServer에 포함됩니다. 그것을시피
//
// phpServer.js - a generic server to serve static files and
//
var fs = require('fs')
, pathfuncs = require('path')
, url = require('url')
, mimetypes = require('./mimetypes')
function phpServer(root, request, response) {
// serve static or pass to php.
var data = url.parse(request.url);
var ext = pathfuncs.extname(data.pathname);
fs.stat(root+request.url, function(err, stat) {
if (err || !stat.isFile()) { // error or not file.
console.log('404');
response.writeHead(404);
response.write('Not Found');
return;
}
// exists - serve.
console.log("serve("+root+request.url+", mimetypes.mimetype("+ext+"))");
response.writeHead(200, {'Content-Type': mimetypes.mimetype(ext)});
response.write('Somethign to serve');
// fs.createReadStream(root+request.url).pipe(response);
});
}
exports.phpServer = phpServer
가 응답 목적 및 참조에 의해 전달되며, 따라서 Response.Write를() 여기서 응답을 작성한다.
그렇지 않습니다. 여기서의 응답은 onRequest의 응답과 동일하지 않으므로 코드 나 내용이 아닌 phpServer의 아무 것도 브라우저로 보내지지 않습니다.
console.log가 나와서 내가 기대하는 바를 보여줍니다.
내가 쓸 수 있도록 전달 된 객체 응답을 얻으려면 어떻게해야합니까?
-------------이 ------------------- 나중에 추가
나는 주어진 대답을 적용하려고했습니다 server.is에 대한 코드는
// server.js - the outer server loop
var http = require('http')
, fs = require('fs')
, pathfuncs = require('path')
, url = require('url')
, mimetypes = require('./mimetypes')
function phpServer(root, request, res) {
// code adapted from page 118 of Smashing Node.js by Guillermo Rauch
// res is response provided to onRequest.
var data = url.parse(request.url);
var ext = pathfuncs.extname(data.pathname);
res.write('Start reply');
fs.stat(root+request.url, function(err,stat) {
// define delayed callback - reponse in scope
if (err || !stat.isFile()) { // error or not file.
console.log('404');
res.writeHead(404);
res.write('Not Found');
res.end
return;
};
// exists so serve.
console.log("serve("+root+request.url+", mimetypes.mimetype("+ext+"))");
res.writeHead(200, {'Content-Type': mimetypes.mimetype(ext)});
res.write('The file contents');
res.end;
} // end callback,
); // end fs.stat call.
} // end phpServer
function start() {
function onRequest(request, response) {
phpServer('D:/websites/coachmaster.co.uk/htdocs',request, response);
}
http.createServer(onRequest).listen(80);
console.log("Server started.");
}
exports.start = start;
전혀 응답하지 않습니다. 시간 초과되었습니다. res.writeHead에 대한 호출 중 하나 이 실패합니다 그러나 입술 범위를 벗어나면,// 정의되지 않은 존재, 또는 재 전달 된 PARAM 경우 성공하지 않습니다.
그것은 성공 및 쓰기와 말 다음에, 그래서 제발 - 내가 뭘 잘못 했어.
파일이 없으면 시작 응답과 시간 초과가 표시됩니다.
res.write ('Start reply')에서; res는 응답 매개 변수이지만 나중에 fs.stat 콜백에 포함되지 않습니다.
왜 안 되니? 젠장 - 이것은 실망 스럽습니다.
첫 번째 호출에서 res.writeHead를 암시 적으로 호출하기 때문에 두 번째 버전이 실패합니다. writeHead에 대한 가시적 호출이 이루어지면 사물이 손상됩니다."응답 시작"호출이 제거되면 두 번째 버전이 정상적으로 작동합니다. – Ian