2

NodeJS のビュー レンダリング エンジンとして EJS を使用できません。

私はいくつかの同様の質問を見つけましたが、他の人にとって実際に機能する EJS のインストールについてすべて述べています。これは私にとっては同じではありません。おそらく、インストールに適切なディレクトリを (OpenShift リポジトリの非常に多くの重複の中から) 選択できないためです。

OpenShiftテンプレートによって作成されたNodeJSのデフォルトアプリがあります。EJS 依存関係をインストールしているときに、どういうわけかそれを台無しにして、次のエラーが発生しました (使用できないモジュールの標準 NodeJS エラー):

エラー: モジュール 'ejs' が見つかりません
    Function._resolveFilename (module.js:337:11) で
    Function._load (module.js:279:25) で
    Module.require で (module.js:359:17)
    要求時 (module.js:375:17)
    View.templateEngine (/usr/lib/node_modules/express/lib/view/view.js:134:38) で
    Function.compile で (/usr/lib/node_modules/express/lib/view.js:68:17)
    ServerResponse._render で (/usr/lib/node_modules/express/lib/view.js:417:18)
    ServerResponse.render で (/usr/lib/node_modules/express/lib/view.js:318:17)
    /var/lib/openshift/5123c2494382ec16ca000222/app-root/runtime/repo/server.js:114:17 で
    コールバック時 (/usr/lib/node_modules/express/lib/router/index.js:272:11)

package.json で言及する以外に、ターミナルから app-root、runtime、および nodejs-0.6 レベルで ejs をインストールしようとしましたが (およびアプリを再起動しました)、役に立ちませんでした。

私のディレクトリ構造は次のとおりです。

-アプリルート
- -データ
---レポ
-----node_modules (ejs あり)
-----server.js
-----package.json (「依存関係」: {"ejs" : ">=0.8.3"},)
-----ビュー
-------defaultError.ejs
- -ランタイム
-  - -データ
-----node_modules (空)
-----repo (app-root/repo と同じ)
-------node_modules (ejsあり)
-nodejs-0.6
- -データ
---repo (app-root/repo と同じ)
-----node_modules (ejs あり)
- -ランタイム
-----node_modules (空)
-----レポ(同一)
-------node_modules (ejsあり)

defaultError.ejs は単純な html です。server.js には次のものがあります。

self.createRoutes = function() {
        self.routes = { };

        //...
        self.routes['/'] = function(req, res) {
            res.setHeader('Content-Type', 'text/html');
            res.send(self.cache_get('index.html') );
        };

        self.routes['/helloejs'] = function(req, res){
            res.render('defaultError', { layout:false } );
        };
    };

self.initializeServer = function() {
        self.createRoutes();
        self.app = express.createServer();

        self.app.set('view engine', 'ejs');
        //  Add handlers for the app (from the routes).
        for (var r in self.routes) {
            self.app.get(r, self.routes[r]);
        }
    };

この長い投稿が私の問題を明確にしてくれることを願っています:)

4

3 に答える 3

0

エラーは、間違ったディレクトリを使用したことが原因です。パッケージをインストールし、プロジェクト ディレクトリからアプリケーションを実行する必要があります。プロジェクトとして使用するフォルダーのディレクトリ構造は次のとおりです。

.
├── app.js
├── node_modules
│   ├── express
│   ├── jade
│   └── socket.io
├── package.json
├── public
│   ├── images
│   ├── javascripts
│   └── stylesheets
├── routes
│   ├── index.js
├── server.js
└── views
    └── layout.jade

このフォルダーから使用すると、 node_modules サブフォルダー ( 、 など)npm install内にパッケージ フォルダーが追加されます。ローカルにインストールされたすべてのモジュールはこのフォルダーからのみ表示されるため、この場所から使用する必要があります。expresssocket.ionode

于 2013-03-05T12:07:58.233 に答える
0

ejs をインストールするときは、オプション --save を使用する必要があります。

npm install ejs --save

.gitignore ファイルを作成します。

node_modules
于 2016-12-16T16:13:25.420 に答える