Para fornecer feedback diferente sobre diferentes solicitações, introduzimos um módulo de processador de eventos.
O módulo é chamado de requestHandlers. Primeiro, adicionamos duas funções de espaço reservado, start () e upload ().
O código para requestHandlers.js é o seguinte:
A cópia do código é a seguinte:
função start () {
console.log ("Chame isso ao acessar /estrela.");
}
função upload () {
console.log ("Chame isso ao acessar/fazer upload.");
}
exports.start = start;
exports.upload = upload;
Em aplicações reais, o número de manipuladores de solicitação continuará aumentando. Obviamente, não queremos concluir a solicitação na rota toda vez que houver um novo URL ou manipulador de solicitação.
Mapeando para o manipulador repetidamente.
Além disso, não queremos ter muito se solicitar se request == X, depois o manipulador de chamadas Y na rota, o que fará com que o código pareça confuso e não profissional.
Aqui vou usar o conceito de matrizes associativas para lidar com esse requisito. Passamos uma série de manipuladores de solicitação através de um objeto e precisamos injetar esse objeto na função Route () de maneira vagamente acoplada.
Vamos primeiro introduzir esse objeto no arquivo principal index.js:
A cópia do código é a seguinte:
var server = requer ("./ servidor");
var roteter = requer ("./ roteador");
var requestHandlers = requer ("./ requestHandlers");
var handle = {};
Handle ["/"] = requestHandlers.start;
manipular ["/start"] = requestHandlers.start;
Handle ["/upload"] = requestHandlers.upload;
server.start (roteter.route, handle);
Por exemplo, se eu quiser adicionar um mapa /show, basta adicionar um identificador [" /show"] requestHandlers.show;
Haha, o código é muito mais conciso e ordenado? !
Em seguida, passamos o objeto Handle para o servidor, e o Server.js é modificado da seguinte maneira:
A cópia do código é a seguinte:
var http = requer ("http");
var url = requer ("url");
Função Iniciar (Rota, Handle) {
função onRequest (solicitação, resposta) {
var pathname = url.parse (request.url) .pathname;
console.log ("Solicitação de" + Pathname + "Recebido.");
rota (alça, nome do caminho);
Response.writehead (200, {"content-type": "text/plana"});
Response.Write ("Hello World");
resposta.END ();
}
http.createServer (onRequest) .Listen (8888);
console.log ("O servidor começou");
}
exports.start = start;
Modifique a função route () no arquivo rota.js correspondentemente:
A cópia do código é a seguinte:
Rota da função (identificador, nome do caminho) {
console.log ("prestes a rotear uma solicitação de" + pathname);
if (typeof handle [pathname] === 'function') {
Handle [Pathname] ();
} outro {
console.log ("Nenhum manipulador de solicitação encontrado para" + pathname);
}
}
exports.Route = rota;
Passamos o objeto Handle como um parâmetro para o servidor e o recebemos pela rota e, finalmente, a rota determina se o manipulador de solicitação correspondente ao caminho atual existe ou não. Se existir, chame a função correspondente.
Podemos obter a função de manuseio de solicitações do objeto passado da mesma maneira que obter elementos da matriz associativa, por isso temos uma expressão simples e suave, como o Handle [Pathname] ();, que parece o mencionado anteriormente: "Oi, por favor me ajude a lidar com esse caminho".
Dessa forma, podemos fazer processamento diferente de acordo com diferentes solicitações.
Na próxima seção, revisaremos ainda mais o código para permitir que o servidor faça algumas operações de feedback reais.