我在代码中遇到了一些错误!请帮帮我
我想在我的网站上创建一个注册函数,但是我遇到了一些问题:
由Express 4.X提供支持的代码
在模型中,我的代码是: 模型/ Account.js
var mongoose = require('mongoose');
var nodemailer = require('nodemailer');
var smtpTransport = require('nodemailer-smtp-transport');
var crypto = require('crypto');
module.exports = function(config, mongoose, nodemailer){
var AccountSchema = new mongoose.Schema({
email: {type: String, unique: true},
password: {type: String},
name: {
first: {type: String},
last: {type: String}
},
birthday: {
day: {type: Number, min: 1, max: 31, require: false},
month: {type: Number, min: 1, max: 12, require: false},
year: {type: Number}
},
photourl: {type: String},
blography: {type: String}
});
var Account = mongoose.model('Account', AccountSchema);
var registerCallback = function(err){
if(err){
return console.log(err);
};
return console.log('Account was created!');
};
var changePassword = function(accountId, newpassword){
var shaSum = crypto.createHash('sha256');
shaSum.update(newpassword);
var hashedPassword = shaSum.digest('hex');
Account.update({_id: accountId}, {$set:{password: hashedPassword}}, {upsert: false},
function changePasswordCallback(err){
console.log('Change password for' + accountId);
}
);
};
var forgetPassword = function(email, resetPasswordUrl, callback){
var user = Account.findOne({email: email}, function findOne(err, doc){
if(err){
callback(false);
}else{
var smtpTransport = nodemailer.createTransport('SMTP', config.mail);
resetPasswordUrl += '?account' + doc._id;
smtpTransport.sendMail({
from: 'admin@rccoder.net',
to: doc.email,
subject: 'Password Request',
text: 'Click to get password' + reserPasswordUrl
}, function fogotPasswordUrl(err){
if(err){
callback(false);
}else{
callback(true);
}
});
}
});
};
var login = function(emai, password, callback){
var shaSum = crypto.createHasn('sha256');
shaSm.update(password);
Account.findOne({email: email, password: shaSum.digest('hex')}, function(err, doc){
callback(null != doc);
});
};
var register = function(email, password, firstName, lastName){
var shaSum = crypto.createHash('sha256');
shaSum.update(password);
console.log('Register in ' + email);
var user = new Account({
email: email,
name: {
first: firstName,
last: lastName
},
password: shaSum.digest('hex'),
});
user.save(registerCallback);
console.log('Save command was send!');
};
return{
register: register,
forgotPassword: forgotPassword,
changePassword: changePassword,
login: login,
Account: Account
}
}

我的路由器是这样的:
var express = require('express');
var router = express.Router();
var crypto = require('crypto');
var Account = require('../models/Account.js')
/* GET home page. */
router.get('/', function(req, res, next) {
res.render('index', { title: 'Express' });
});
router.get('/login', function(req, res, next){
res.render('login', {title: 'Login'});
});
router.post('/login', function(req, res){
console.log('login Request:');
var email = req.param('Email', null);
var password = req.param('Password', null);
if(null = email || email.length < 1 || null = password || password.length < 1){
res.send(400);
return;
}
Account.login(email, password, function(success){
if(!success){
res.send(401);
return;
}else{
console.log('Login is success!');
res.send(200);
}
});
});
router.get('/reg', function(req, res, next){
res.render('reg', {title: 'Register'});
});
router.post('/reg', function(req, res, next){
console.log('Reg Request:');
var email = req.body['Email'];
var password = req.body['Password'];
var FirstName = req.body['FirstName'];
var LastName = req.body['LastName'];
if(null == email || null == password){
res.send(400);
return;
}else{
Account.register(email, password, FirstName, LastName);
res.send(200);
}
});
module.exports = router;
&#13;
Ans这个名为reg.html的神庙是这样的:
{% extends 'layout.html' %}
{% block content %}
<p>Welcome to {{title}}</p>
<form method="POST">
<label for="Email">Email:</label>
<input type="text" name="Email">
<label for="Password">Password:</label>
<input type="password" name="Password">
<label for="FirstName">FirstName</label>
<input type="text" name="FirstName">
<label for="LastName">LastName</label>
<input type="text" name="LaseName">
<input type="submit" value="Reg">
</form>
<ul>
<li><a href="forgotPassword">ForgotPassword ?</a></li>
<li><a href="register">Register</a></li>
</ul>
{% endblock %}
&#13;
但如果我在reg.html中检查了名为REG的提交,则会出现一些错误:
Object function (config, mongoose, nodemailer){ var AccountsSchema = new ……………………)has no method 'register'
&#13;
,控制台就是:
Reg Request:
POST /reg 500 25.466 ms - 7685
&#13;
我的代码中没有发生过这种情况!
帮助
答案 0 :(得分:0)
在您的模型中,export
唯一的功能就是单一功能。
要使其工作,您应该使用参数(config, mongoose, nodemailer)
调用该函数。这将返回一个对象,其中包含对要调用的函数的引用。您可能忽略了这一点,因为错误信息非常明确。
除此之外,我建议稍微改写一下。您可能想要完全删除此行:
module.exports = function(config, mongoose, nodemailer){
然后导出功能:
module.exports = {
register: register,
forgotPassword: forgotPassword,
changePassword: changePassword,
login: login,
Account: Account
}
从那里开始