我的 server.js 是
// 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;
这将调用 php.phpServer 每个请求,并将响应作为第三个参数。
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.logs 出来并显示了我的期望。
如何获得传递的对象响应以便我可以调用 write ?
------------- 稍后添加 -------------------
我已经尝试应用给定的答案和 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 超出范围/不存在/未定义,则对 res.writeHead 的调用将失败,或者如果 re 是传入的参数,则调用成功。
它成功了,然后是 write 和 end,所以请 - 我做错了什么。
如果文件不存在,我会收到一个开始回复,然后是超时。
在 res.write('开始回复'); res 是响应参数,但它不在 fs.stat 回调的后面。
为什么不?该死的——这令人沮丧。