web前端|js教程
nodejs,服务器,非阻塞操作
web前端-js教程
我们要将response对象(从服务器的回调函数onRequest()获取)通过请求路由传递给请求处理程序。随后,处理程序就可以采用该对象上的函数来对请求作出响应。
frozenui 案例源码,vscode里怎么插入图片,桌面共享ubuntu,tomcat 页面找不到,数据爬虫 平台,php图片排序,忠县服务型seo推广,图片用什么网站源码,淘宝手机端购物车模板lzw
我们先对server.js做出修改:
飞禽走兽手机版源码,vscode怎么编译文件,ubuntu 硬盘命令,tomcat谁开发的,uipath做爬虫,php 防止跨站攻击,必火seo优化系统加盟,织梦网站日志,动网论坛模板下载lzw
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);
}
http.createServer(onRequest).listen(8888);
console.log("Server has started.");
}
exports.start = start;
vb远程源码,vscode带返回参数,ubuntu 重启声卡,tomcat+as7,儿歌爬虫,php 课程介绍,游戏行业seo优化运营,php网站 虚拟币,微信第三方模板lzw
我们将response对象作为第三个参数传递给route()函数,并且,我们将onRequest()处理程序中所有有关response的函数调都移除,因为我们希望这部分工作让route()函数来完成。
接下来修改 router.js:
function route(handle, pathname, response) {
console.log("About to route a request for " + 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;
同样的模式:相对此前从请求处理程序中获取返回值,这次取而代之的是直接传递response对象。 如果没有对应的请求处理器处理,我们就直接返回“404”错误。
接下来修改requestHandler.js:
var exec = require("child_process").exec;
function start(response) {
console.log("Request handler start was called.");
exec("ls -lah", function (error, stdout, stderr) {
response.writeHead(200, {"Content-Type": "text/plain"});
response.write(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;
我们的处理程序函数需要接收response参数,为了对请求作出直接的响应。 start处理程序在exec()的匿名回调函数中做请求响应的操作,而upload处理程序仍然是简单的回复“Hello World”,只是这次是使用response对象而已。
如果想要证明/start处理程序中耗时的操作不会阻塞对/upload请求作出立即响应的话,可以将requestHandlers.js修改为如下形式:
var exec = require("child_process").exec;
function start(response) {
console.log("Request handler start was called.");
exec("find /",
{ timeout: 10000, maxBuffer: 20000*1024 },
function (error, stdout, stderr) {
response.writeHead(200, {"Content-Type": "text/plain"});
response.write(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;
这样一来,当请求http://localhost:8888/start的时候,会花10秒钟的时间才载入,而当请求http://localhost:8888/upload的时候,会立即响应,纵然这个时候/start响应还在处理中。