可能的控制器或至少两次执行的功能

时间:2017-05-05 05:42:28

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

所以我收到了这个错误:" GET http://localhost:8000/blogs/undefined net :: ERR_EMPTY_RESPONSE angular.js:12587"。

当我进入我的主要博客页面并进入博客类别页面时,会发生这种情况。查看网络选项卡,我得到:  1. blog-home.html 200 xhr angular.js 12587 4.6kb 21ms  2.所有200 xhr angular.js 12587 3.0kb 57ms  3.未定义待定xhr angular.js 12587 3.0kb 57ms 0kb

和我去博客类别页面时一样。最终他们失败了,并将错误踢到了上面。

所以在此之前被拒绝...我已经阅读并在堆栈上尝试过: 没运气。也许我错过了什么或打错了什么。我完全傻眼了,我觉得这显然高于我的技能水平。所以这里有一堆代码...... Server.js



var express = require('express');
var favicon = require('serve-favicon');
var bodyParser = require('body-parser');
var Mailgun = require('mailgun-js');
var path = require('path');
require('colors');

var app = express();


app.use(favicon(path.join(__dirname, 'client/assets/images', '*****')))

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

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

//app.all('/*', function(req, res, next) {			    
//    res.sendFile('index.html', { root: 'client'});
//});

require('./server/config/mongoose.js');

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

var api_key = '*********';
var domain = '*********';
var mailgun = require('mailgun-js')({apiKey: api_key, domain: domain});
 
var data = {
  from: '********',
  to: '********',
  subject: 'Hello',
  text: 'Testing some Mailgun awesomness!'
};
 
mailgun.messages().send(data, function (error, body) {
  console.log(body);
});

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




的index.html



<!DOCTYPE html>
<html lang="en" ng-app="Bridgeman">
<head>

    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <meta name="description" content="">
    <meta name="author" content="">

    <meta name="description" content="">
    <meta name="author" content="">
    <meta name="revisit-after" content="10 days">
    <meta name="googlebot" content="noodp">
    <meta name="msnbot" content="noodp">
    <meta name="slurp" content="noodp, noydir">
    <meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self' 'unsafe-inline' ; connect-src 'self'; img-src * data:; style-src 'self' 'unsafe-inline'; font-src * data:; frame-src https://www.google.com/maps/embed?pb=!1m14!1m12!1m3!1d44591.890384371676!2d-118.36723983279781!3d33.83006153459027!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!5e0!3m2!1sen!2sus!4v1492366398808 ">
    
    
    <meta content="/assets/images/******_BigBearSnowTrail.jpg" itemprop="image">
    <link href="/assests/images/*******.ico" rel="shortcut icon">

    <base href="/" />

    <title></title>
  
    <link href="assets/css/bootstrap.min.css" rel="stylesheet">   
    <link href="assets/css/modern-business.css" rel="stylesheet"> 
    <link href="assets/font-awesome/css/font-awesome.min.css" rel="stylesheet" type="text/css">

    <script type="text/javascript" src="angular/angular.js"></script>
    <script type="text/javascript" src="angular-route/angular-route.js"></script>
    <script src="app.js"></script>

    <script src="/factories/ContactFactory.js"></script>
    <script src="/factories/loginFactory.js"></script>
    <script src="/factories/blogFactory.js"></script>

    <script src="/controllers/contactController.js"></script>
    <script src="/controllers/servicesController.js"></script>
    <script src="/controllers/blogController.js"></script>
    <script src="/controllers/blogViewController.js"></script>
    <script src="/controllers/blogAWSController.js"></script>
    <script src="/controllers/loginController.js"></script>
  
    <base target="_blank">
</head>

<body>

    <div ng-include='"templates/header.html"'></div>
    <div ng-view=""></div>
    <div ng-include='"templates/footer.html"'></div>

    
   
    <script src="assets/js/jquery.js"></script>    
    <script src="assets/js/bootstrap.min.js"></script>    
</body>
</html>
&#13;
&#13;
&#13;

app.js(如你所见,我试图将AWS类别分隔到自己的控制器中,并且在加载该页面时都会被触发)

&#13;
&#13;
var Bridgeman = angular.module('Bridgeman', ['ngRoute']);

	Bridgeman.config(['$routeProvider', '$httpProvider', '$locationProvider', '$qProvider', function($routeProvider, $httpProvider, $locationProvider, $qProvider){
			$qProvider.errorOnUnhandledRejections(false);
			$httpProvider.interceptors.push(function($q, $location){									
				return{
					'responseError': function(rejection){
						if(rejection.status == 401){
							$location.url('/');
						}
						return $q.reject(rejection);
						}
					}
				});
			$routeProvider
				.when('/', {
					templateUrl:'partials/home.html',					
				}).when('/about', {
					templateUrl:'partials/about.html',					
				}).when('/services', {
					templateUrl: 'partials/services.html',
					controller: 'servicesController'
				}).when('/blog', {
					templateUrl: 'partials/blog-home.html',
					controller: 'blogViewController'
				}).when('/blogAWS', {
					templateUrl: 'partials/blog-aws.html',
					controller: 'blogAWSController'
				}).when('/blogSEO', {
					templateUrl: 'partials/blog-SEO.html',
					controller: 'blogViewController'
				}).when('/blogSecurity', {
					templateUrl: 'partials/blog-Security.html',
					controller: 'blogViewController'
				}).when('/blogBusiness', {
					templateUrl: 'partials/blog-Business.html',
					controller: 'blogViewController'
				}).when('/blogSportsTech', {
					templateUrl: 'partials/blog-SportsTech.html',
					controller: 'blogViewController'
				}).when('/blog-post/:id', {
					templateUrl: 'partials/blog-post.html',
					controller: 'blogViewController'					
				}).when('/contact', {
					templateUrl: 'partials/contact.html',
					controller: 'contactController'
				}).when('/login', {
					templateUrl:'partials/login.html',
					controller: 'loginController'
				}).when('/admin', {
					templateUrl:'partials/admin.html',
					controller: 'blogController'
				}).otherwise({
					redirectTo:'/'
				});
			$locationProvider.html5Mode(true);
		}])

	Bridgeman.run(function($rootScope, $location, $anchorScroll, $routeParams) {
  		$rootScope.$on('$routeChangeSuccess', function(newRoute, oldRoute) {
    		$location.hash($routeParams.scrollTo);
    		$anchorScroll();  
  });
})
&#13;
&#13;
&#13;

blog-home.html(这是在我的blogViewController中触发这两个函数的主要博客页面)

&#13;
&#13;
<!-- Page Content -->
    <div class="container">

        <!-- Page Heading/Breadcrumbs -->
        <div class="row">
            <div class="col-lg-12">
                <h1 class="page-header">Blog Home 
                    <small>My insights just for you</small>
                </h1>
                <ol class="breadcrumb">
                    <li><a href="/blog">Home</a>
                    </li>
                    <li class="active">Blog Home</li>
                </ol>
            </div>
        </div>
        <!-- /.row -->

        <div class="row">

            <!-- Blog Entries Column -->
            <div class="col-md-8">
              <div class="blogs" ng-repeat="b in blogs | orderBy:'-createdAt' | filter:searchblogs">

                <!-- Blog Post -->
                <h2>
                    <p>{{b.title}}</p>
                </h2>
                <p class="lead">
                    by {{b._user.name}} in the {{b.category}} category
                </p>
                <p><i class="fa fa-clock-o"></i> Posted on {{b.createdAt | date: "MMM. dd, yyyy"}}</p>
                <hr>
                <p>{{b.snippet}}</p>
                <hr>
                <p>{{b.content}}</p>                
                <a class="btn btn-primary" ng-href="/blog-post/{{b._id}}">Read More <i class="fa fa-angle-right"></i></a>

                <hr>
              </div>
              <hr>
              </div>

            <!-- Blog Sidebar Widgets Column -->
            <div class="col-md-4">

                <!-- Blog Search Well -->
                <div class="well">
                    <h4>Search my blogs</h4>
                    <div class="input-group">
                        <input type="text" class="form-control" ng-model="searchblogs">
                        <span class="input-group-btn">
                            <button class="btn btn-default" type="button"><i class="fa fa-search"></i></button>
                        </span>
                    </div>
                    <!-- /.input-group -->
                </div>

                <!-- Blog Categories Well -->
                <div class="well">
                    <h4>Blog Categories</h4>
                    <div class="row">
                        <div class="col-lg-6">
                            <ul class="list-unstyled">
                                <li><a href="/blogAWS">AWS</a>
                                </li>
                                <li><a href="/blogSEO">SEO</a>
                                </li>
                                <li><a href="/blogSecurity">Security</a>
                                </li>
                                <li><a href="/blogBusiness">Business Tips</a>
                                </li>
                            </ul>
                        </div>
                        <!-- /.col-lg-6 -->
                        <div class="col-lg-6">
                            <ul class="list-unstyled">
                                <li><a href="/blogSportsTech">Tech in Sports</a>
                                </li>
                                <li><a href="#">Coming Soon</a>
                                </li>
                                <li><a href="#">Coming Soon</a>
                                </li>
                                <li><a href="#">Coming Soon</a>
                                </li>
                            </ul>
                        </div>
                        <!-- /.col-lg-6 -->
                    </div>
                    <!-- /.row -->
                </div>

                <!-- Side Widget Well -->
                <div class="well">
                    <h4>My Blog</h4>
                    <p>Here is a collection of my genius (ha!) and tech insights. I'm sure sooner than later I will discuss Formula 1 tech but be assured there will be plenty of SEO and various web development tips/tools/tricks. And lets not forget some general business savviness I've learned over the years.</p>
                </div>
            </div>
        </div>
        <!-- /.row -->
&#13;
&#13;
&#13;

blogViewController(函数所在的位置。再一次,我注释掉了getOneBlog,并且没有发生错误。那么什么是触发此触发并且在点击按钮之前?)

&#13;
&#13;
Bridgeman.controller('blogViewController', function($scope, blogFactory, $location, $routeParams){
  console.log("in the blog VIEW controller");

  $scope.blogs = [];
  $scope.one = [];

  blogFactory.getAllBlogs(function(output){
    $scope.blogs = output;
    console.log(output);
  })

  blogFactory.getOneBlog($routeParams.id, function(output){
    $scope.one = output;
    console.log(output);
  })
});
&#13;
&#13;
&#13;

blogFactory(这里没有我知道的问题)

&#13;
&#13;
Bridgeman.factory('blogFactory', function($http){
  var factory = {};

  factory.submitNewBlog = function(input, callback){
    $http.post('/blogs/new', input).then(function(output){
      console.log("we just added a new blog");
      callback(output.data);
    });
  }
  //factory.submitNewComment = function(input, callback){
  //  $http.post('/comments/new', input).then(function(output){
  //    console.log("we just added a new comment");
  //    callback(output.data);
  //  });
  //}

  factory.getAllBlogs = function(callback){
    $http.get('/blogs/all').then(function(output){
      console.log("we just got all blogs");
      callback(output.data);
    });
  }

  factory.getOneBlog = function(blogID, callback){          //factory.getOneBlog = function(blogID, callback)
    $http.get('/blogs/' + blogID).then(function (output){          //$http.get('blogs/' + blogID).then(function (output){
      console.log(output.data);                             //callback(output.data);
      console.log("we just got one blog");
      callback(output.data);
    });
  }

  return factory;
});
&#13;
&#13;
&#13;

路线(这里有几种不同的风格,只是为了解决这个问题而采用不同的格式)

&#13;
&#13;
var users = require('./../controllers/users.js');
var blogs = require('./../controllers/blogs.js');

module.exports = function(app){
	
	app.post('/reg', function(req, res){
	users.reg(req, res);
	});

	app.post('/login', function(req, res){
	users.login(req, res);
	});
	
	app.get('/blogs/all', function(req, res) {
        blogs.getAllBlogs(req, res);
    });

    app.get('/blogs/:id', blogs.getOneBlog); 			//app.get('/blogs/:id', blogs.getOneBlog)       
    

    app.post('/blogs/new', function(req, res) {
        blogs.addBlog(req, res);
    });

	app.post('/contact', function(req,res){

		var api_key = 'key-2451a2b90a87be616ab68b8f7c8f97ea';
		var domain = 'sandbox7dedeb0d5d384b6a8ce4f49165204257.mailgun.org';
		var mailgun = require('mailgun-js')({apiKey: api_key, domain: domain});
		 
		var data = {
		  from: 'Website inquiry <postmaster@sandbox7dedeb0d5d384b6a8ce4f49165204257.mailgun.org>',
		  to: '*************com',
		  subject: req.body.full_name+" has sent you a message",
		  html:
			  req.body.full_name+" ..."+			  
			  req.body.phone+" ..."+
			  req.body.email+" ..."+			  		  
		  	  req.body.message
		};
		 
		mailgun.messages().send(data, function (error, body) {
		  console.log(body);
		  console.log("working...");
		  if(!error)
		    res.send("Your message has been sent");
		  else
		  	res.send("Uh oh... something went wrong!");
		});
	});
}
&#13;
&#13;
&#13;

blogs.js服务器端控制器(这里没问题......我知道)

&#13;
&#13;
var Blog = mongoose.model('Blog');

module.exports = (function() {
    return {
      getAllBlogs: function(req, res){
        Blog.find({}).populate([{path : '_user'}]).exec(function(err, b){
          if(err){
            console.log("there was an error when getting all blogs".red);
          } else {
            console.log(b);
            console.log("successfully got all blogs".green);
            res.json(b);
          }
        });
      },

      getOneBlog: function(req, res) {
        console.log('Rich band aid');
        if (req.params.id !== 'undefined') {
        console.log('there was an id', req.params.id); 
        Blog.findOne({_id: req.params.id}).exec(function(err, b) {        //({_id: req.params.id}, function(err,b){})
          if(err){
            console.log('error is', err);
            console.log("there was an error when getting the blog".red);
          } else {
            console.log(b);
            console.log("successfully got the blog".green);
            res.json(b);
          }
        });
       }else {
        console.log('no id');
       }
      },

      addBlog: function(req, res) {
        console.log("===========================".yellow);
        console.log(req.body);
        console.log("===========================".yellow);

        var b = new Blog({category: req.body.category, title: req.body.title, snippet: req.body.snippet, content: req.body.content, _user: req.body._user})
        b.save(function(err){
          if(err){
            console.log("there was an error when saving a blog".red);
          } else {
            console.log(b);
            console.log("successfully saved the above blog".green);

            res.redirect('/blogs/all');
          }
        })
      }
    }
})();
&#13;
&#13;
&#13;

和猫鼬db(这里没问题......我知道)

&#13;
&#13;
var mongoose = require('mongoose');

// Create the message schema
var BlogSchema = new mongoose.Schema({
	category: {type: String, required: true, minlength: 3, enum:['Security', 'Business', 'SEO', 'AWS', 'Tech in Sports']},
	title: {type: String, required: true, minlength: 3},
	snippet: {type: String, required: true, minlength: 3},
    content: {type: String, required: true, minlength: 3},
    _user: {type: mongoose.Schema.Types.ObjectId, ref: 'User'}    
}, {timestamps: true});

mongoose.model('Blog', BlogSchema);
&#13;
&#13;
&#13;

非常感谢任何帮助。感谢

PS ...是的我在您尝试刷新页面时意识到frame-src和font-src的CPS错误。超级烦人。

1 个答案:

答案 0 :(得分:0)

能够和朋友一起弄清楚。通过将2个函数包装到&#39; if&#39;来解决问题。声明。它可能不是正确的解决方案,但它完美无缺。

&#13;
&#13;
Bridgeman.controller('blogViewController', function($scope, blogFactory, $location, $routeParams){
  console.log("in the blog VIEW controller");

  $scope.blogs = [];
  $scope.one = [];


  if ($routeParams.id) {
    blogFactory.getOneBlog($routeParams.id, function(output) {
    $scope.one = output;
    console.log(output);
    });
  } else {
    blogFactory.getAllBlogs(function(output) {
    $scope.blogs = output;
    console.log(output);
    });
  }  
});
&#13;
&#13;
&#13;