node.js回调HTTP服务器读取目录

麦科雷亚

菜鸟有一些问题,无法使脚本显示文件列表,我认为关于walk是异步的,但是我没有任何帮助的错误。

问候,马塞洛

// ---- listFiles.js -----------------------------------------------------------
exports.walk = function(currentDirPath, extension,  callback) {

    var fs = require('fs');
    var regex = new RegExp( extension + '$', 'g' );
    fs.readdir( currentDirPath, function (err, files) {
        if (err) callback(err);
        files.filter(function(fname){
            if(fname.match(regex)) {
                callback(null, fname);
            }
        })
    });
    console.log("Fired callback.");
}
// walk('.', 'js', function(err, file){ console.log(file); }); runs OK

// ---- listfilesTest.js --------------------------------------------------------
var http = require('http');
var content = require('./listFiles');
var args = process.argv.slice(2);
console.log(args); // command line arguments (dir & extension)

http.createServer(function (req, res) {
    var files = [];
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.write('-- list of files --\n');
    content.walk(args[0], args[1], function(err, data){
        if(err) console.error(err);
        //console.log(data);
        res.write(data); // not printing the dir Listings
    } );
    res.end();
}).listen(9000);
// nodemon listFilesTest.js '.' 'js'
jfriend00

res.end()res.write()执行任何语句之前都在打电话对的回调content.walk()是异步的,这意味着它会在未来的不确定时间内发生。

您需要在res.end()所有res.write()语句完成调用这种方式exports.walk()是结构化的,调用者无法知道何时完成列出文件并调用回调,因此必须对其进行重组以指示完成时间。


有很多可能的方法来构造它。一种相当简单的方法是,仅在回调中添加一个参数,该参数会在列表完成时发出信号。

// ---- listFiles.js -----------------------------------------------------------
exports.walk = function(currentDirPath, extension,  callback) {

    var fs = require('fs');
    var regex = new RegExp( extension + '$', 'g' );
    fs.readdir( currentDirPath, function (err, files) {
        if (err) callback(err);
        files.filter(function(fname){
            if(fname.match(regex)) {
                // call the callback with this filename, not done yet
                callback(null, false, fname);
            }
        })
        // signal that we are done listing the files
        callback(null, true);
        console.log("Done listing files.");
    });
}
// walk('.', 'js', function(err, done, file){ console.log(file); }); runs OK

// ---- listfilesTest.js --------------------------------------------------------
var http = require('http');
var content = require('./listFiles');
var args = process.argv.slice(2);
console.log(args); // command line arguments (dir & extension)

http.createServer(function (req, res) {
    var files = [];
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.write('-- list of files --\n');
    content.walk(args[0], args[1], function(err, done, data){
        if(err) {
            console.error(err);
            return;
        }
        if (done) {
            res.end();
        } else {
            //console.log(data);
            res.write(data); // not printing the dir Listings
        }
    });
}).listen(9000);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

node.js服务器句柄请求回调函数在写入响应之前结束

来自分类Dev

Node.js HTTP服务器

来自分类Dev

Node.js HTTP服务器

来自分类Dev

如果我的Node.js服务器在等待Web服务回调时崩溃了怎么办?

来自分类Dev

如何正确处理 Node.js gRPC 客户端和服务器之间的回调

来自分类Dev

如何从Node JS服务器读取JSON响应?

来自分类Dev

Node JS上的HTTP请求回调

来自分类Dev

node.js http服务器并发问题

来自分类Dev

连续运行Node JS服务器(http-server)

来自分类Dev

node.js http服务器并发问题

来自分类Dev

Node.js状态服务器

来自分类Dev

如何创建Node JS服务器

来自分类Dev

调用node.js服务器

来自分类Dev

崩溃服务器 node.js

来自分类Dev

如何在Node.js中的服务器目录上方获取文件

来自分类Dev

在Node.js上的相同地址上服务WebSocket和HTTP服务器

来自分类Dev

在Node.js上的相同地址上服务WebSocket和HTTP服务器

来自分类Dev

Node.js中的http.request超时回调

来自分类Dev

Node.JS HTTP 请求 - 分离回调函数

来自分类Dev

Node.JS Thrift服务器示例给出“无法读取未定义的属性'tls'”

来自分类Dev

使用Node.js和SSH2从SFTP服务器读取文件

来自分类Dev

错误:使用Node.js连接到mysql服务器时,读取ECONNRESET

来自分类Dev

与Apache Web服务器和Node.js REST服务器共享HTTP端口80

来自分类Dev

为什么Node.js简单的HTTP服务器应用程序无法在服务器上运行?

来自分类Dev

Node.js WebSocket服务器,HTTP触发器

来自分类Dev

Node.js WebSocket服务器,HTTP触发器

来自分类Dev

node.js服务器和带有express.js的HTTP / 2(2.0)

来自分类Dev

带有较小文件的node.js HTTP服务器中的响应慢得多

来自分类Dev

强制关闭node.js http服务器中的所有连接

Related 相关文章

热门标签

归档