如何在节点js中定义parse属性

时间:2016-06-25 15:19:27

标签: node.js

> simpleserver@1.0.0 start C:\projects\simpleserver
> node server.js

C:\projects\simpleserver\server.js:19
        var url = url.parse(req.url).pathname;
                     ^

TypeError: Cannot read property 'parse' of undefined
    at Server.<anonymous> (C:\projects\simpleserver\server.js:19:15)
    at emitTwo (events.js:87:13)
    at Server.emit (events.js:172:7)
    at HTTPParser.parserOnIncoming [as onIncoming] (_http_server.js:533:12)
    at HTTPParser.parserOnHeadersComplete (_http_common.js:103:23)

2 个答案:

答案 0 :(得分:1)

如果您查看代码,问题是您正在定义一个名为url的新变量,该变量将覆盖url模块。

 var url = url.parse(req.url).pathname;

这相当于:

 var url;
 url = url.parse(req.url).pathname;

因此,无论url来自更高范围的值是什么,您只需覆盖它并创建一个名为url的新局部变量undefined,因此没有.parse()属性。

您可以通过重命名其中一个变量来修复它,使其具有不同的名称,如下所示:

var localUrl = url.parse(req.url).pathname;

答案 1 :(得分:0)

问题的根源是url未定义。最有可能的是,您打算使用标准url模块,因此您需要执行类似

的操作
var url_m = require('url'); // near the top of your file
... later ...
var url = url_m.parse(req.url).pathname;

我建议使用名称url_m来表明它是一个模块,但您可以用其他任何内容替换该名称。在某些示例中,您会看到var url = require('url');,但我没有这样做,因为您有一个不同的变量,您也在调用url