0

我有一个基于https://github.com/linnovate/mean的多页博客。现在,当我直接转到/articles/:articleid类型 url 时,我看到的只是{"title":"this is the title","_id":"12345","user":"me"}从我的数据库返回的纯 JSON ()。如果我/articles/:articleid从我的主页进入/-> 单击一个链接,页面解析得很好,因为 Angular 和 DOM 已经从主页加载,所以 Angular 读取并解析返回的 JSON。

理想情况下,我希望能够输入文章的直接 URL(例如,/articles/:articleid)并让服务器加载 DOM,然后让 AngularJS 返回并解析 JSON。或者有一些方法让我的服务器加载 html/css/etc。如果还没有,在解析 JSON 之前(从而避免纯 json 输出)。

节点路由:

var articles = require('../app/controllers/articles');
app.get('/articles', articles.all);
app.get('/articles/:articleId', articles.show);
app.param('articleId', articles.article); //This is called when I directly link to an article

文章型号代码:

exports.article = function(req, res, next, id) {
   Article.load(id, function(err, article) {
      if (err) return next(err);
      if (!article) return next(new Error('Failed to load article ' + id));

      console.log(req.headers['x-requested-with']);
      if ( req.headers["x-requested-with"] === "XMLHttpRequest" ) {
         console.log('sending jsonp' + req.article.title);
         res.jsonp(req.article);
      } else {
         console.log("sending page");
         res.render('index', {     //my default JADE skeleton page
            user: req.user ? JSON.stringify(req.user) : "null"
         });
      }

      //req.article = article;
      next();
   });
};

exports.show = function(req, res) {
   console.log(req.headers['x-requested-with']);
   if ( req.headers["x-requested-with"] === "XMLHttpRequest" ) {
      res.jsonp(req.article);
   } else {
      res.render('index', { //default page
         user: req.user ? JSON.stringify(req.user) : "null"
      });
   }
};

角度路线:

when('/articles/:articleId', {
  templateUrl: 'views/articles/view.html'
}).

处理单个文章的控制器是:

$scope.findOne = function() {
    Articles.get({
        articleId: $routeParams.articleId
    }, function(article) {
        $scope.article = article;
    });
    //$scope.htmlReady();
};

提前致谢!

编辑:我对标题中的内容类型做了一些检查。我现在能够辨别它是直接链接还是来自应用程序中的另一个页面,但我不知道两者如何呈现模板页面(jade)、启动 Angular 以及将 JSON 提供给它如果是直接链接就去吧。

我的文件夹结构:public--css--img--js--lib--views

我直接链接时的日志输出(它似乎/articles用作基础):

GET /articles/72119103c2e3a932b51e000201 304 619ms
GET /articles/css/blogstyle.css 404 134ms
GET /articles/lib/angular-resource/angular-resource.js 404 126ms
GET /articles/lib/jquery/jquery.js 404 136ms
GET /articles/lib/angular/angular.js 404 134ms
GET /articles/lib/angular-cookies/angular-cookies.js 404 136ms
GET /articles/lib/bootstrap/js/bootstrap.js 404 148ms
GET /articles/lib/angular-bootstrap/ui-bootstrap-tpls.js 404 58ms
GET /articles/lib/angular-ui-utils/modules/route.js 404 67ms
4

1 回答 1

0

您需要查看请求内容类型并在它是 content/html 时返回完整的角度页面,当它是 jsonp 请求时返回 JSON。当然,这是为了路线/articles/:articleId

于 2013-11-10T04:53:30.597 回答