Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/460.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript TypeError:$.equals不是函数_Javascript_Node.js_Express_Mongoose_Backend - Fatal编程技术网

Javascript TypeError:$.equals不是函数

Javascript TypeError:$.equals不是函数,javascript,node.js,express,mongoose,backend,Javascript,Node.js,Express,Mongoose,Backend,我使用的是ExpressJS,我有一个问题,.equals()方法无法识别。这两个对象的类型不同,但都具有相同的值。我将操作符修改为==,但它会连续跳转到else语句 我想知道'how'我可以比较这两个参数,以及如何纠正if语句中的错误,目的是确保用户可以编辑配置文件如果他们是所有者 这是我的代码以及输出和数据库。提前感谢您的帮助 ============================问题已解决 守则: app.use("/teachers/:id/editProfile", function

我使用的是ExpressJS,我有一个问题,
.equals()
方法无法识别。这两个对象的类型不同,但都具有相同的值。我将操作符修改为
==
,但它会连续跳转到else语句

我想知道'how'我可以比较这两个参数,以及如何纠正
if
语句中的错误,目的是确保用户可以编辑配置文件
如果他们是所有者

这是我的代码以及输出和数据库。提前感谢您的帮助

============================问题已解决

守则:

app.use("/teachers/:id/editProfile", function (req, res ){

    if(req.isAuthenticated()){
        Teacher.findById(req.params.id, function(err , foundTeacher){
            if(err){
                res.redirect("/teachers");
            }else{

                    console.log("WHAT !    " + foundTeacher._id );
                    console.log("WHAT !    " + req.user.profile );

                    if(req.user.profile.equals(foundTeacher._id) ){
                        res.send("YOU HAVE PERM ............");

                    }else{
                        res.send("YOU DO NOT HAVE PERMISSION TO DO THAT");
                    }
            }
        })
    }else{
        res.send("YOU NEED TO BE LOGGED IN TO DO THAT");
    }
WHAT !    5c8b73b2e9b9ec2179224ef4
WHAT !    5c8b73b2e9b9ec2179224ef4
var UserSchema = new mongoose.Schema({

    username: String,

    password: String,

    profile:[

        {type: mongoose.Schema.Types.ObjectId,

        ref: "profile"

        }]

});
输出:

app.use("/teachers/:id/editProfile", function (req, res ){

    if(req.isAuthenticated()){
        Teacher.findById(req.params.id, function(err , foundTeacher){
            if(err){
                res.redirect("/teachers");
            }else{

                    console.log("WHAT !    " + foundTeacher._id );
                    console.log("WHAT !    " + req.user.profile );

                    if(req.user.profile.equals(foundTeacher._id) ){
                        res.send("YOU HAVE PERM ............");

                    }else{
                        res.send("YOU DO NOT HAVE PERMISSION TO DO THAT");
                    }
            }
        })
    }else{
        res.send("YOU NEED TO BE LOGGED IN TO DO THAT");
    }
WHAT !    5c8b73b2e9b9ec2179224ef4
WHAT !    5c8b73b2e9b9ec2179224ef4
var UserSchema = new mongoose.Schema({

    username: String,

    password: String,

    profile:[

        {type: mongoose.Schema.Types.ObjectId,

        ref: "profile"

        }]

});
events.js:160

  throw er; // Unhandled 'error' event
  ^

TypeError: req.user.profile.equals is not a function
at /home/ubuntu/workspace/LearnFaceToFace/app.js:211:41
at /home/ubuntu/workspace/LearnFaceToFace/node_modules/mongoose/lib/model.js:4719:16
at /home/ubuntu/workspace/LearnFaceToFace/node_modules/mongoose/lib/query.js:4099:12
at process.nextTick (/home/ubuntu/workspace/LearnFaceToFace/node_modules/mongoose/lib/query.js:2681:28)
at _combinedTickCallback (internal/process/next_tick.js:73:7)
at process._tickCallback (internal/process/next_tick.js:104:9)
猫鼬数据库:

app.use("/teachers/:id/editProfile", function (req, res ){

    if(req.isAuthenticated()){
        Teacher.findById(req.params.id, function(err , foundTeacher){
            if(err){
                res.redirect("/teachers");
            }else{

                    console.log("WHAT !    " + foundTeacher._id );
                    console.log("WHAT !    " + req.user.profile );

                    if(req.user.profile.equals(foundTeacher._id) ){
                        res.send("YOU HAVE PERM ............");

                    }else{
                        res.send("YOU DO NOT HAVE PERMISSION TO DO THAT");
                    }
            }
        })
    }else{
        res.send("YOU NEED TO BE LOGGED IN TO DO THAT");
    }
WHAT !    5c8b73b2e9b9ec2179224ef4
WHAT !    5c8b73b2e9b9ec2179224ef4
var UserSchema = new mongoose.Schema({

    username: String,

    password: String,

    profile:[

        {type: mongoose.Schema.Types.ObjectId,

        ref: "profile"

        }]

});
db.teachers.find()

db.users.find()

用户架构

app.use("/teachers/:id/editProfile", function (req, res ){

    if(req.isAuthenticated()){
        Teacher.findById(req.params.id, function(err , foundTeacher){
            if(err){
                res.redirect("/teachers");
            }else{

                    console.log("WHAT !    " + foundTeacher._id );
                    console.log("WHAT !    " + req.user.profile );

                    if(req.user.profile.equals(foundTeacher._id) ){
                        res.send("YOU HAVE PERM ............");

                    }else{
                        res.send("YOU DO NOT HAVE PERMISSION TO DO THAT");
                    }
            }
        })
    }else{
        res.send("YOU NEED TO BE LOGGED IN TO DO THAT");
    }
WHAT !    5c8b73b2e9b9ec2179224ef4
WHAT !    5c8b73b2e9b9ec2179224ef4
var UserSchema = new mongoose.Schema({

    username: String,

    password: String,

    profile:[

        {type: mongoose.Schema.Types.ObjectId,

        ref: "profile"

        }]

});

好的,首先要做的事。当出现问题时,您决定使用console.log对其进行调试,切勿使用
+
。是的,我知道在这些数据上贴上标签是有益的,但这里有个窍门:这

console.log('SOME_LABEL:', some_data);
。。。将为您提供有关此数据的详细信息。而这个

console.log('SOME_LABEL:' + some_data);
。。。将始终向您显示一个字符串-将一些\u标签字符串和一些\u数据连接到字符串的结果。是的,在JS中,转换为字符串的东西与这个东西的表示不同

事实上,这正是问题所在。两个选中值都不是字符串-它们是对象(*)。除非在
==
==
的两侧都有相同的对象,否则您应该始终期望从该操作中获得
false
。这里也是这样

是的,某些库()上有一些实用程序方法,允许您按值比较对象,但这些方法基本上是作为独立函数调用的,不会自动在所有对象上可用。这是有原因的

通常,当您确实需要比较两个相同类型(类)的对象时,最好对它们实现一些比较方法,或者将它们转换为基本体。否则,您将一次又一次地检查有用的属性和不需要比较的内容

在这种特殊情况下,
ObjectId
上有一个属性,用于进行比较-:

str

返回对象的十六进制字符串表示形式

因此,进行检查的一种可能方法是:

if (req.user.profile.str === foundTeacher._id.str) { ... }

*好的,
foundTeacher.\u id
是ObjectId,但您最好仔细检查
req.user.profile
实际上是什么。如果是字符串,只需删除属性检查。

好的,首先要做的事情。当出现问题时,您决定使用console.log对其进行调试,切勿使用
+
。是的,我知道在这些数据上贴上标签是有益的,但这里有个窍门:这

console.log('SOME_LABEL:', some_data);
。。。将为您提供有关此数据的详细信息。而这个

console.log('SOME_LABEL:' + some_data);
。。。将始终向您显示一个字符串-将一些\u标签字符串和一些\u数据连接到字符串的结果。是的,在JS中,转换为字符串的东西与这个东西的表示不同

事实上,这正是问题所在。两个选中值都不是字符串-它们是对象(*)。除非在
==
==
的两侧都有相同的对象,否则您应该始终期望从该操作中获得
false
。这里也是这样

是的,某些库()上有一些实用程序方法,允许您按值比较对象,但这些方法基本上是作为独立函数调用的,不会自动在所有对象上可用。这是有原因的

通常,当您确实需要比较两个相同类型(类)的对象时,最好对它们实现一些比较方法,或者将它们转换为基本体。否则,您将一次又一次地检查有用的属性和不需要比较的内容

在这种特殊情况下,
ObjectId
上有一个属性,用于进行比较-:

str

返回对象的十六进制字符串表示形式

因此,进行检查的一种可能方法是:

if (req.user.profile.str === foundTeacher._id.str) { ... }

*好的,
foundTeacher.\u id
是ObjectId,但您最好仔细检查
req.user.profile
实际上是什么。如果它是一个字符串,只需删除属性检查。

您实际上应该尝试另一种方法

foundTeacher._id.equals(req.user.profile)

“==”或“==”运算符在这种情况下不起作用,因为其中一个ID是字符串,另一个是mongodb objectid,因此您必须使用mongoose提供的方法将这些值与值进行比较。

您应该尝试另一种方法

foundTeacher._id.equals(req.user.profile)

“==”或“==”运算符在这种情况下不起作用,因为其中一个ID是字符串,另一个是mongodb objectid,因此您必须使用mongoose提供的方法将这些值与值进行比较。

可能您的一些用户有配置文件,而一些用户没有配置文件?-在使用它之前检查它是否存在-尽管您还需要决定如果用户没有配置文件该怎么办-可能您的一些用户有配置文件,而一些没有在使用它之前检查它是否存在-虽然您还需要先决定如果用户没有配置文件该怎么办,但我将我的检查方法console.log从+改为“”,这确实有助于新结果:什么!5c8b73b2e9b9ec2179224ef4什么![“5c8b73b2e9b9ec2179224ef4”]第二,很好的澄清,我真的不认为类型会有多大影响,特别是当我以前的“坏”检查方法是retu时