0

https://github.com/linnovate/meanに基づく複数ページのブログがあります。現在、タイプ URL に直接アクセスすると、データベースから返された/articles/:articleidプレーンな JSON ( ) しか表示されません。メインページからリンク{"title":"this is the title","_id":"12345","user":"me"}をクリックすると、Angular と DOM がメインページから既に読み込まれているため、ページは正常に解析され、Angular は返された JSON を読み取って解析します。/articles/:articleid/

/articles/:articleid理想的には、記事 (例: ) への直接 URL を入力して、サーバーに 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 を 1 つのページに提供する方法がわかりません。直リンクなら行く。

私のフォルダー構造: 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-type を確認し、content/html の場合は完全な角度ページを返し、jsonp リクエストの場合は JSON を返す必要があります。もちろん、これはルート用/articles/:articleIdです。

于 2013-11-10T04:53:30.597 に答える