创建一个身份验证系统。当用户进行post
- 查询(router.js
)时:
var user = require("../controllers/user");
router.post("/login", function(req, res, next){
user.login(req, function(result) {
res.send(result);
});
文件控制器/ user.js:
var mongo = require("./mongo");
exports.login = function (req, callback) {
var res;
var login = req.body.login,
password = req.body.password;
var user = new mongo.User({
login: login,
password: password
});
//check if exist user
user.findOne({
login: login
}, function (err, obj) {
if (err) {
console.log("user not found -> save");
user.save(function (err) {
if (err) {
console.log(err);
} else {
callback("OK");
}
});
} else {
console.log("ELSE");
if (password == obj["password"]) {
callback("OK");
}
}
});
}
我想在user.login完成创建/创建新用户时使用 - >用结果调用回调。
exports.login = function(req, callback){
user.findOne(/...login or sign up new user.../);
callback("Success");
}
因此,在用户授权的情况下 - >
user.login(req, function(result) {
res.send(result); //this executes
});
如何制作?
答案 0 :(得分:1)
当我尝试使用user.findOne()
查找用户时,主要问题出在语法上。
相反user.findOne()
我使用mongo.User.findOne()
:
//mongo.User because I required a mongo.js, where connect to db
// where I had a User model
mongo.User.findOne({ login: login }, function(err, user){
if(err){
reject(err);
} else {
if(user) {
if(password == user["password"]) {
resolve("Login success.");
}
} else {
console.log("new user creating...");
var newUser = new mongo.User({ login: login, password: password });
newUser.save(function(err){
if(err) {
reject(err);
console.log("error with saving");
} else {
resolve("New user created.")
}
})
}
}
});
我也使用了Promises(作为上述用户Tomalak),因此router.js
中的代码:
function userCheck(req){
return new Promise(function(resolve, reject){
user.check(req, resolve, reject);
});
}
userCheck(req).then(result => {
console.log("promise result");
res.send(result);
}, error => {
console.log("promise error");
res.send(error);
});