MEAN GET http:// localhost:8000 / user / undefined 500(内部服务器错误)

时间:2016-10-26 20:08:22

标签: javascript angularjs node.js mongoose mean-stack

已经审核了其他答案,没有任何帮助。只是想让用户名显示在我的主页面上。它适用于其他页面。可能是我错过了一些容易的东西,但我已经盯着这个足够长的时间了。 获取它的主页:

<div ng-controller="dashboardController" flex layout="column" layout-align="center center">

<md-toolbar>
      <div class="md-toolbar-tools">
        <h1>
          <span>Welcome {{user.username}}</span>
        <h2>
          <span>NAME OF MY THIS SITE</span>
        </h2>        
        <span flex></span>
        <md-button ng-click="logout()" aria-label="Log Out">
          Log Out
        </md-button>
      </div>
</md-toolbar>
</div>

主页面控制器:

kelvindashdemo.controller('dashboardController', ['$scope', 'UserFactory', '$routeParams', '$location', 'TopicFactory', function($scope, UserFactory, $routeParams, $location, TopicFactory){
	UserFactory.getUser($routeParams.id, function(user){		//makes request to backend and sets $scope to the user id
		$scope.user = user;
		console.log($routeParams);
	})
	$scope.logout = function(){
    	UserFactory.logout();
	}
	
	TopicFactory.getTopics(function(topics){
		$scope.topics = topics;
	})
	$scope.createTopic = function(topic){
		TopicFactory.createTopic(topic, function(){
			TopicFactory.getTopics(function(topics){
				$scope.topics = topics;
				$scope.newTopic = {};
			})			
		})
	}
}])

UserFactory:

kelvindashdemo.factory('UserFactory', ['$http','$location', function($http, $location){
	var factory = {};
	factory.login = function(user, callback){
		$http({
			method:"POST",
			data:user,
			url:'/login'
		}).then(function success(res){
			callback(res);
		}, function error(res){
			console.log(res);
		});
	}
	factory.register = function(user, callback){
		$http({
			method:"POST",
			url:'/register',
			data:user
		}).then(function success(res){
			callback(res);
		}, function error(res){
			console.log(res);
		});
	}
	factory.getUser = function(userId, callback){
		$http({
			method:"GET",
			url:'/user/'+userId
		}).then(function success(res){
			callback(res.data);
		})
	}
	factory.logout = function(){
    $http({
      method: 'GET',
      url: '/logout',
    }).then(function(res){
      if (res.status == 200){
        $location.url('/login');
      }
    })
  }
	return factory;
}])

路线:

var Users = require('../controllers/Users.js');
var Topics = require('../controllers/Topics.js');
var Answers = require('../controllers/Answers.js');
var Comments = require('../controllers/Comments.js');

module.exports = function(app){
	app.post('/login', Users.login);
	app.post('/register', Users.register);
	app.get('/logout', Users.logout);

	app.use(loginAuthentication);
	//Protected API
	app.get('/user/:id', Users.get);

	app.get('/topics', Topics.getAll);
	app.post('/topics', Topics.createNew);
	app.get('/topic/:id', Topics.get);

	app.post('/topic/:id/answers/', Answers.createNew);
	
	app.get('/comments/likes/:id', Comments.like);
	app.get('/comments/dislikes/:id', Comments.dislike);
	app.post('/answers/:id/comments', Comments.createNew);
}

function loginAuthentication(req,res,next){
	if (req.session.user){
		next();
	}else{
		res.status(401).send("User is not logged in");
	}
}

服务器端UsersController:

var mongoose = require('mongoose');
var User = mongoose.model('User');


module.exports = {
	register: function(req,res){
		/* username:? , password:?, passwordconfirm:? */
		if (req.body.password != req.body.password_confirm){
			console.log("These passwords dont match");
			return res.sendStatus(400);
		}
		var user = new User(req.body);
		user.save(function(err, user){
			if (err){
				console.log("This is a db error");
				return res.status(400).json(err);
			}
			else if(user){
			console.log("This is a good registration", user);
			req.session.user = user._id;
			res.sendStatus(200);
			}
		})
	},

	login: function(req,res){
		/* username:? , password:? */
		var password = req.body.password;				/*for hashing of passwords in the future*/
		User.findOne({username: req.body.username, password: password}, function(err, user){
			if (err){
				console.log("This is the json error");
				return res.status(400).json(err);
			}
			else if (user){
				console.log("This is a good combo");
				req.session.user = user._id;
				res.sendStatus(200);	
			}else{
				console.log("This is the no good return msg")
				res.status(400).send({data:"Yo, Username Password combo be no good"});
			}			
		})
	},
	logout: function(req,res){
		console.log("You are out man 1");
		req.session.destroy();
		console.log("You are out man");
		res.send(200);
	},
	get: function(req,res){												//pulls userId in association with $routeParams
		User.findOne({_id: req.params.id}, function(err, user){
			if(err){
				return res.sendStatus(500);
			}else{
			res.json(user);
			}
		})
	}
}

用户模型:

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

var UserSchema = new mongoose.Schema({
	username: {type:String, required:true, minlength:4},
	password: {type:String, required:true, minlength:4, select:false},
	topics: [{type: mongoose.Schema.Types.ObjectId, ref:'Topic'}],
	answers: [{type: mongoose.Schema.Types.ObjectId, ref:'Answer'}],
	comments: [{type: mongoose.Schema.Types.ObjectId, ref:'Comment'}],
}, {timestamps:true});

mongoose.model('User', UserSchema);

Server.js:

//Node modules
var express = require('express');
var mongoose = require('mongoose');
var bodyParser = require('body-parser');
var expressSession = require('express-session');
var path = require('path');


//App init
var app = express();
require('./server/config/mongoose.js');



var sessionConfig = {
 secret:'CookieMonster', // Secret name for decoding secret and such
 resave:false, // Don't resave session if no changes were made
 saveUninitialized: true, // Don't save session if there was nothing initialized
 name:'myCookie', // Sets a custom cookie name
 cookie: {
  secure: false, // This need to be true, but only on HTTPS
  httpOnly:false, // Forces cookies to only be used over http
  maxAge: 3600000
 }
}

app.use(bodyParser.urlencoded({extended:true}));
app.use(bodyParser.json({extended:true}));
app.use(expressSession(sessionConfig));

app.use(express.static(path.join(__dirname, 'client')));

var routes = require('./server/config/routes.js');
routes(app);

app.listen(8000, function(){
	console.log("I'm listening...");
})

任何帮助将不胜感激!

0 个答案:

没有答案