2013-07-13 3 views
1

Я новичок в NodeJS.NodeJS console.log работает, но response.write не

Я читаю this book, чтобы узнать его.

Я использую следующий код в одном из модулей обработчика запроса. В принципе, когда я получаю запрос от браузера, я посылаю вызов этой функции и получаю содержимое команды «DIR» в окнах, отображаемых на экране.

index.js файл является тот, который я бегу как веб-приложение

Это index.js

var server = require("./server.js"); 
var router = require("./router.js"); 
var requestHandlers = require("./requestHandlers"); 

var handle = {}; 
handle["/"] = requestHandlers.start; 
handle["/start"] = requestHandlers.start; 
handle["/upload"] = requestHandlers.upload; 

server.start(router.route, handle); 

Это server.js Файл-сервер отправляет запросы к маршрутизатору

var http = require("http"); 
var url = require("url"); 

function start(route, handle) 
{ 
function onRequest(request, response) 
{ 
    //console.log("Request recieved!"); 
    var pathname = url.parse(request.url).pathname; 
    console.log("Request for " + pathname + " has been recieved"); 
    response.writeHead(200, {"Content-Type": "text/plain"}); 

    route(handle, pathname, response); 

    response.end(); 
} 

http.createServer(onRequest).listen(8888); 

console.log("Server started!"); 

} 

exports.start = start; 

Это r external.js Это маршрутизатор, который использует ручку , созданную в index.js (используется для отображения запроса соответствующим обработчикам).

function route(handle, pathname, response) 
{ 
console.log("About to route the request " + pathname); 
if(typeof handle[pathname] == 'function') 
{ 
    handle[pathname](response); 
} 
else 
{ 
    console.log("No request handler found for " + pathname); 
    response.writeHead(404,{"Content Type": "text/plain"}); 
    response.write("404 not found"); 
    response.end(); 
} 
} 

exports.route = route; 

И, наконец, это где запросы решаются, в requestHandlers.js Здесь, это выглядит console.log заявление отлично работает, но Response.Write заявления не делают.

var exec = require("child_process").exec; 

function start(response) 
{ 
    console.log("Request handler 'start' was called."); 

    exec("dir", function(error, stdout, stderr) { 
     response.writeHead(200,{"Content Type": "text/plain"}); 
     response.write("Hello Upload!"); 
     response.write(stdout); 
     response.write("Hello!"); 
     console.log(stdout); 
     response.end(); 
    }); 
} 

function upload(response) 
{ 
console.log("Request handler 'upload' was called."); 
response.writeHead(200,{"Content Type": "text/plain"}); 
response.write("Hello Upload!"); 
response.end(); 
} 

exports.start = start; 
exports.upload = upload; 

Любая помощь будет принята с благодарностью

+2

Нам понадобится A) полный пример. Фрагмент выше выглядит нормально, но нам нужно увидеть всю картину. И B) точное, техническое описание поведения программы, а не «оно не работает». Что оно делает? Что вы ожидаете? Есть ли сообщения об ошибках? –

+1

+1 отправить полный код. скажите, что он делает и что это ** предполагается ** делать – CuriousMind

+0

Там, я внес изменения в соответствии с запросами. :) –

ответ

2

Я думаю, что причина вашего запроса разрыва является то, что он выглядит как response.writeHead вызывается дважды, один раз в сервер # onRequest и один раз в requestHandlers # загрузки.

Node.js Docs - response.writeHead

После того, как вы чувствуете себя более комфортно с узлом я бы, наверное, порекомендовать вытягивать любую запись ответа/окончание кода из server.js и реализации промежуточного программного подхода, где каждый запрос пропускается через каждый RequestHandler пока он не будет согласован или не дойдет до конца.

надеюсь, что это поможет - счастливое кодирование!

EDIT: +1 комментарий Андреаса. Не проблема в маршруте загрузки, так как это все синхронно, но в requestHandlers # запускается после того, как exec называется управляющим потоком, продолжается до server.js, где вызывается response.end().

+0

Спасибо за помощь! Я просто прокомментировал 'response.writeHead()' и 'response.end()' часть из _server.js_ –

Смежные вопросы