Home  >  Article  >  Web Front-end  >  Create nodejs server easily (5): event handler_node.js

Create nodejs server easily (5): event handler_node.js

WBOY
WBOYOriginal
2016-05-16 16:25:491042browse

In order to provide different feedback to different users, we introduce an event handler module.

This module is named requestHandlers. We first add two placeholder functions: start() and upload().

requestHandlers.js code is as follows:

Copy code The code is as follows:

function start() {
console.log("This is called when accessing /star.");
}

function upload() {
console.log("This is called when accessing /upload.");
}

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

In a real application, the number of request handlers will continue to increase, and we certainly don’t want to have to complete the request in the route every time there is a new URL or request handler

Mapping to handler and tossing it over and over again.

In addition, we don’t want to have a lot of if request == x then call handler y in the routing, which will make the code look messy and unprofessional.

Here I will use the concept of associative arrays to handle this requirement. We pass a series of request handlers through an object, and we need to inject this object into the route() function in a loosely coupled way.

We first introduce this object into the main file index.js:

Copy code The code is as follows:

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

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

server.start(router.route, handle);

For example, if I want to add a /show mapping, just add handle["/show"] requestHandlers.show; and that's it;

Haha, does this make the code more concise and orderly? !

Next we pass the handle object to the server, and modify server.js as follows:

Copy code The code is as follows:

var http = require("http");
var url = require("url");
function start(route, handle) {
function onRequest(request, response) {
var pathname = url.parse(request.url).pathname;
Console.log("Request for " pathname " received.");
route(handle, pathname);
response.writeHead(200, {"Content-Type": "text/plain"});
response.write("Hello World");
response.end();
}
http.createServer(onRequest).listen(8888);
console.log("Server has started.");
}
exports.start = start;

Correspondingly modify the route() function in the route.js file:

Copy code The code is as follows:

function route(handle, pathname) {
console.log("About to route a request for " pathname);
if (typeof handle[pathname] === 'function') {
handle[pathname]();
} else {
console.log("No request handler found for " pathname);
}
}
exports.route = route;

We pass the handle object to the server as a parameter, which is then received by the router. Finally, the router determines whether the request handler corresponding to the current path exists. If it exists, the corresponding function is called.

We can get the request processing function from the passed object in the same way as getting elements from the associative array, so we have a simple and smooth expression in the form of handle[pathname]();, which feels like As mentioned earlier: "Hey, please help me with this path".

In this way, we can handle different requests differently.

In the next section we will further modify the code to allow the server to perform some actual feedback operations.

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn