【发布时间】:2013-12-01 00:41:13
【问题描述】:
嘿伙计们,我有一个功能可以在提交到数据库之前验证表单,但是其中一个字段需要是唯一的,所以我必须将数据发送回数据库进行比较,如果有错误,它将指示用户,否则它将数据保存到数据库中。但我不断收到“TypeError:无法读取 null 的属性 'publicUsername'”,我不知道为什么
我的代码
this.handleSignup = function(req, res, next) {
"use strict";
var validate = validateSignup(req.body, function(error, data) {
if(error) {
res.send(400, error.message);
}
});
if(validate){
users.addUser(data, function(err, user) {
sessions.startSession(data, function(err, session_id) {
"use strict";
if (err) return next(err);
res.cookie('session', session_id);
res.send(200);
});
});
}
}
验证注册
function validateSignup(data,callback) {
"use strict";
users.checkPublicUsername(data.publicUsername, function(err, result){
if(result){
callback(new Error('Public Username is taken Please choose another'), null);
}
});
checkPublicUsername
this.checkPublicUsername = function(data,callback) {
var publicUsername = {
"publicUsername":data
}
users.findOne(publicUsername, function(err, result) {
if(result.publicUsername === data){//terminal show this line is the error
callback(null,true); // if match return true to trigger indicator
}else{
callback(null,false); // else return false to proceed
}
})
}
【问题讨论】:
-
该错误应该为您提供确切的文件和行号。你还需要什么?
-
是的,我知道,但我不明白为什么我一直在接受它
-
什么是函数user.findOne?因为传递给回调的结果是空的。
-
@TheThirdOne 这个功能是比较已有数据和publicUsername,如果数据匹配(这意味着它不能被使用,因为它必须是唯一的)
-
您正在使用 findOne,因此如果没有包含该查询的文档,它将在您尝试检查 result.publicUserName 之后返回 null。由于结果为 null,您无法获取它是属性。您应该检查结果是否为空。
标签: javascript node.js mongodb express