windows下node入门问题
发布于 13 年前 作者 yaolifei 4650 次预览 最后一次回复是 13 年前 来自
http://www.nodebeginner.org/index-zh-cn.html#javascript-and-nodejs 看的是这个入门的 但是始终实现不了异步,一直是阻塞的upload执行的时候也要等上10秒,我是在windows7下,用官方的安装包,求指点,代码如下:
index.js
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);
server.js
var http = require('http');
var url = require('url');
function start(route, handle) {
http.createServer(function(request, response){
var pathname = url.parse(request.url).pathname;
console.log('Request for ' + pathname + ' received!')
route(handle, pathname, response);
}).listen(8080);
console.log('Server has started!')
}
exports.start = start;
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;
requestHandlers.js
var exec = require('child_process').exec;
function start(response) {
console.log("Request handler 'start' was called.");
exec('dir', function(error, stdout, stderr){
function sleep(milliSeconds){
var startTime = new Date().getTime();
while (new Date().getTime() < startTime + milliSeconds);
}
sleep(10000);
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;
照理说start方法中exec是异步的,那为什么浏览器调用start后,再调用upload,upload没有立即返回呢?
4 回复
没有人看这个入门的吗? 真郁闷
我看入门时候 Linux 下很乖抄代码的所以没发现…
对比楼主的代码是把两个例子混到一起了, 是不是因为 Windows 所以故意改了?
exec没有问题, 但 Linux 下find /直接就能浪费时间的, 就没有同样位置的sleep(),而
sleep()在教程中有提到start()这段包含阻塞, 所以阻塞了,我理解是
exec正常运行的, 因为速度快, 马上进入sleep()的阻塞了.不知道 Windows 有什么能比上
find /的命令…start exec 回调函数的时候还是阻塞的
我以前看过,也遇到这个问题,到现在我也没想明白。