资源未传递 - 节点js

时间:2018-04-23 17:29:54

标签: node.js callback

我试图通过回调转发创建的资源(http)以使用它在网页上打印结果

var http = require('http');
var net = require('net');
var fs = require ('fs');
var Path = require('path');


function LookDirs(server,port,callback){
    http.createServer(function (req, res) {
    res.setHeader("Content-Type", "text/html");
    res.writeHead(200);
    res.write('<html><head><title>Simple Server</title></head>');
    res.write('<body> Test1');
    callback('..', res);
    res.end('\n</body</html>');
  }).listen(port);
};



function ViewContent(dirPath){
  fs.readdir(dirPath, function(err, entries){
    for (var idx in entries){
      var fullPath = Path.join(dirPath, entries[idx]);
      (function(fullPath){
            console.log(fullPath,idx);
            res.write('abc');
        })(fullPath);
      }
    })
}

LookDirs("Test 234", "1337", ViewContent);

我一直在

        res.write('abc');
        ^

ReferenceError:res未定义

我确信在回调期间我已经传递了该资源。

2 个答案:

答案 0 :(得分:0)

我对该代码做了几个变体,并尝试了那个...然后我得到了

../ICD Service.json 0
../nodejs 1
../windows.json 2
events.js:160
      throw er; // Unhandled 'error' event
      ^

Error: write after end

答案 1 :(得分:0)

您无法从ViewContent访问res。 来自createServer的此(req,res)响应代表请求和响应。您可以在此处查看更多相关信息:https://nodejs.org/en/docs/guides/anatomy-of-an-http-transaction/

const server = http.createServer((request, response) => {
    // magic happens here!
});

此外,您无法在createServer原型上运行回调,但您可以运行listen方法。

var http = require('http');
var net = require('net');
var fs = require('fs');
var Path = require('path');


function LookDirs(server, port, callback) {
    http.createServer(function (req, res) {
        res.setHeader("Content-Type", "text/html");
        res.writeHead(200);
        res.write('<html><head><title>Simple Server</title></head>');
        res.write('<body> Test1');
        res.end('\n</body</html>');
    }).listen(port, callback("./"));
};

function ViewContent(dirPath) {
    fs.readdir(dirPath, function (err, entries) {
        for (var idx in entries) {
            var fullPath = Path.join(dirPath, entries[idx]);
            // I can not access res from here, it has sent already.
            console.log(fullPath)
        }
    })
}

LookDirs("Test 234", "1337", ViewContent);