40

私は多くのAngular-expressシードを経験し、それらがどのように機能するかを理解しました。私が抱えている問題は次のとおりです:1)。テンプレートにはejs-localsを使用したいと思います。2)。サーバー側とクライアント側のルーティングを正しく構成する方法。また、などのURLを入力するとき/aboutは、エラーを生成しないようにします。cannot /get

Angularapp.jsに含まれるもの

// angular stuff

$routeprovider.when('/', {
 templateUrl: 'index',
 controller: IndexCtrl
});
$routeprovider.when('/about', {
 templateUrl: 'partials/about',
 controller: IndexCtrl
});

Express app、jsに含まれるもの:

app.get('/', routes.index);
app.get('/about', routes.about);

ルートフォルダには「index.js」が含まれています。

exports.index = function(req, res){
  res.render('index',{name:"Hello"});
};

exports.about = function (req, res) {
  res.render('partials/about');
};

ビューフォルダに含まれるものindex.ejs

<!--HTML head/navigation bar here-->
<div ng-view></div>

ビューフォルダ内にはフォルダがありpartialsます:(ビュー/部分/

index.ejs:

 <h1>Index</h1>

about.ejs:

<h1>About</h1>
4

4 に答える 4

31

これらのルートをエクスプレスサーバーに追加します

app.get('/partials/:filename', routes.partials);
app.use(routes.index);

その後、routes.js

exports.partials = function(req, res){
  var filename = req.params.filename;
  if(!filename) return;  // might want to change this
  res.render("partials/" + filename );
};

exports.index = function(req, res){
  res.render('index', {message:"Hello!!!"});
};

これにより、とにリクエストを送信するときに、expressがレンダリングされたテンプレートを返すようにpartials/indexなりpartials/aboutます。

ここに要点があります:https ://gist.github.com/4277025

于 2012-12-13T15:07:20.717 に答える
5

それが私がやった方法です。私はJadeを使用していますが、Ejsも同様です。

app.js

// Routes
app.get('/', routes.index);
app.get('/partials/:name', routes.partials);

私のテンプレートは/views/partialsに保存されています:

app.set('views', __dirname + '/views');

クライアントサイドでは、angularの$routeProviderを使用してパーシャルをロードできるようになりました。

/*global define */

define([
   'angular',
   'controllers/aController',
   'controllers/bController'],
   function (angular, aController, bController) {
    'use strict';

    return angular.module('controllers', [], ['$controllerProvider', '$routeProvider',
        function ($controllerProvider, $routeProvider) {
            $controllerProvider.register('AController', ['$scope', aController]);
            $controllerProvider.register('BController', ['$scope', bController]);
            // routes
            $routeProvider.when('/A', {templateUrl: 'partials/A', controller: aController});
            $routeProvider.when('/B', {templateUrl: 'partials/B', controller: bController});
            $routeProvider.otherwise({redirectTo: '/A'});
        }]);
    }
);
于 2012-12-20T09:05:56.007 に答える
5

私は翡翠と角度を使用するのにいくつかの問題を抱えていました、これは私のために働いたものです。

ディレクトリ構造:

public
  |-js
  |-css
  |-views
    |-main
      -main.jade
    |-auth
      -login.jade
server
  |-includes
    -layout.jade
  |-views
    -index.jade
server.js

次に、server.jsでのルーティングの構成は次のようになります。

app.configure(function(){
    app.set('views', __dirname + '/server/views');
    app.set('view engine', 'jade');
})
// server side route for the partials files
app.get('/views/*', function(req, res){
    res.render('../../public/views/' + req.params);
})

// everything handled by this route
app.get('*', function(req, res){
    res.render('index');
})

角度のあるルートは次のようになります。

$routeProvider.when('/', {
    templateUrl: '/views/main/main',    // gets main.jade from server
    controller: 'mainCtrl'
})

index.jadeはこのように見えます:

extends ../includes/layout

block main-content
    .navbar.navbar-inverse.navbar-fixed-top
        div(ng-include="'/views/account/navbar-login'")
    section.content
        div(ng-view)
于 2014-05-01T08:40:00.800 に答える
1

あなたはこのようなことを試すことができます、

const path = require("path");

/* For serving static HTML files */
app.use(function(req, res, next) {
    res.sendFile(path.resolve(__dirname + '/dist/index.html'));
});

/* For ejs, jade/pug engines */
app.use(function(req, res, next) {
    res.render(path.join(__dirname, '/dist/index.pug'));
});
于 2017-09-09T08:31:38.497 に答える