【问题标题】:error function is not defined for res node没有为 res 节点定义错误函数
【发布时间】:2015-06-23 19:46:42
【问题描述】:

我使用以下代码,当我运行运行此函数的程序时,我得到错误 res is not defiend(TypeError: undefined is not a function),它可能是什么?我在函数参数中有它? ?

http.createServer(function (req, res) {


    res.redirect("http://localhost:3002");

}).listen(9006);

https://github.com/nodejitsu/node-http-proxy

在那里我使用 使用自定义服务器逻辑设置独立代理服务器

【问题讨论】:

  • res.redirect 是 Express 函数,而不是标准 Node 函数。
  • @loganfsmyth- 谢谢,但请参阅也有 res github.com/nodejitsu/node-http-proxy 的文档
  • @Mark 怎么样?这些文档都没有建议使用 res.redirect。错误消息显示 res.redirect 未定义,而不是 res 未定义。
  • 考虑错误。它说您尝试调用的函数不是函数。你没有尝试调用 res(),而是 redirect(),这是 res 的一个属性。如果 res 未定义,那将是一个不同的错误。您可以使用 console.log(res) 来更好地了解正在发生的事情。 @loganfsmyth 是正确的。 Express 为 req 和 res 添加属性。
  • 下面有两个答案解释了如何。

标签: javascript node.js


【解决方案1】:

undefined is not a function 表示redirect 不是res 的函数(或方法)。我敢打赌,如果你这样做 console.log(res),你不会得到错误,这意味着,是的,res 已定义,但 redirect 未定义。这是一个 ExpressJS 方法,所以我假设你还没有 require'ed Express 是你的应用程序,如果你打算使用它的话。

如果您想在不使用 Express 的情况下进行重定向,一种选择是设置不同的位置标头和响应代码(来自 here):

response.writeHead(302, {
  'Location': 'your/404/path.html'
  //add other headers here...
});
response.end();

来自维基百科:

HTTP 响应状态码 302 Found 是一种常见的执行方式 网址重定向。

编辑

根据您提供的库:

【讨论】:

  • 谢谢 josh 我使用下面的库,github.com/nodejitsu/node-http-proxy 我应该如何在这里使用它?
  • @Mark,不客气。与我刚刚解释的完全相同的方式......图书馆是无关紧要的。您的库中没有 redirect 方法,所以您不走运。我上面提供的示例显示了一种重定向方式。
  • @Mark,我编辑了我的答案,请参阅库中的hostRewrite。这是一种方式。但是,我不确定您从哪里得到 redirect,因为在该库的 API 中没有提到任何 redirect 方法。
  • 谢谢乔希你看到我更新的帖子我把我使用的库和逻辑放在那里,我应该如何使用它与你的建议(主机重写?我只是希望 url 重定向应用程序到创建的新服务器的新端口....你能帮忙吗?
  • @Mark,我建议只阅读 API,我以前从未使用过它。
【解决方案2】:

您可以使用@Josh 写的内容发送响应页面,也可以使用以下代码同时处理 404 页面:

var http = require('http'),
    fs = require('fs'),
    util = require('util'),
    url = require('url');

var server = http.createServer(function(req, res) {
    if(url.parse(req.url).pathname == '/') {
        res.writeHead(200, {'content-type': 'text/html'});
        var rs = fs.createReadStream('index.html');
        util.pump(rs, res);
    } else {
        res.writeHead(404, {'content-type': 'text/html'});
        var rs = fs.createReadStream('404.html');
        util.pump(rs, res);
    }
});

server.listen(8080);

【讨论】:

    【解决方案3】:

    NodeJs 没有任何redirect 函数使用以下代码进行重定向

    res.writeHead(302, {
      'Location': 'http://localhost:3002'
      //add other headers here...
    });
    response.end();
    

    注意TypeError: undefined is not a function 表示您尝试访问的函数未定义。

    【讨论】:

    • 谢谢,但我用这个github.com/nodejitsu/node-http-proxy 所以应该定义函数...
    • @Mark 该模块没有将redirect 方法添加到res
    • @KevinB-请看我更新的帖子,我使用不同的逻辑库,在这种情况下我应该怎么做...
    猜你喜欢
    • 1970-01-01
    • 2016-03-01
    • 2015-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-25
    • 2021-06-23
    • 1970-01-01
    相关资源
    最近更新 更多