gpt4 book ai didi

javascript - 明确存在的功能被识别为未定义

转载 作者:行者123 更新时间:2023-11-30 10:01:44 25 4
gpt4 key购买 nike

我正在尝试在 NodeJS 和 AngularJS 中构建一个简单的链接共享网络应用程序。我有一个函数存在,但被报告为未定义。

这是 angularApp.js 中特定于此操作的代码

app.factory('auth', ['$http', '$window', function($http, $window){
var auth = {};
auth.register = function(user){
return $http.post('/register', user).success(function(data){
auth.saveToken(data.token);
}).error(function(err, req, res, next) {console.log(err)});
};
return auth;
}]);

这是在routes\index.js中注册路由的代码

var express = require('express');
var jwt = require('express-jwt');
var router = express.Router();
var auth = jwt({secret: 'SECRET', userProperty: 'payload'});

var mongoose = require('mongoose');
var User = mongoose.model('User');
// Creates a user given a username and password
router.post('/register', function(req, res, next){
if(!req.body.username || !req.body.password){
return res.status(400).json({message: 'Please fill out all fields'});
}
var user = new User();
user.username = req.body.username;
user.setPassword(req.body.password);

user.save(function (err){
if(err){ return next(err); }

return res.json({token: user.generateJWT()})
});
});

用户.js

var mongoose = require('mongoose');
var jwt = require('jsonwebtoken');

var UserSchema = new mongoose.Schema({
username: {type: String, lowercase: true, unique: true},
hash: String,
salt: String
});

mongoose.model('User', UserSchema);

// Accepts a password then generates a salt and associated password hash
UserSchema.methods.setPassword = function(password) {
...
};

这里是有问题的 HTML 文件代码:

<form ng-submit="register()" style="margin-top:30px;">
<input type="text" class="form-control" placeholder="Username" ng-model="user.username"></input>
<input type="password" class="form-control" placeholder="Password" ng-model="user.password"></input>
<button type="submit" class="btn btn-primary">Register</button>
</form>

因为我在 angularApp.js 中有 }).error(function(err, req, res, next) {console.log(err)});,所以我在单击“注册”按钮时的控制台:

<h1>undefined is not a function</h1>
<h2></h2>
<pre>TypeError: undefined is not a function
at C:\Linked\linked\routes\index.js:107:8
...
</pre>

C:\Linked\linked\routes\index.js:107:8是下面一行:user.setPassword(req.body.password);

console.log() 不会在 routes\index.js 中输出任何内容,无论我输入什么(即使是 console.log("hi"); ), 所以我无法检查 req.body 的值。

最佳答案

app.factory('auth', ['$http', '$window', function($http, $window){
var auth = {};
auth.register = function(user){
return $http.post('/register', user).success(function(data){
auth.saveToken(data.token);
}).error(function(err, req, res, next) {console.log(err)});
};
return auth;
}]);

在这一行 auth.saveToken(data.token); - auth 将引用工厂函数中指定的 auth 对象,它似乎没有 saveToken 定义的方法。这会导致范围和关闭问题。尝试将此处的 auth 重命名为其他名称或在 var auth = jwt({secret: 'SECRET', userProperty: 'payload'}); (或任何您正在 Angular 应用程序中定义它)

编辑:事实证明问题出在 mongoose 模式并在添加方法之前对其进行编译。这个答案并不完全正确。

关于javascript - 明确存在的功能被识别为未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31276302/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com