Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 在OpenShift NodeJS模板上找不到EJS模块_Node.js_Ejs_Openshift - Fatal编程技术网

Node.js 在OpenShift NodeJS模板上找不到EJS模块

Node.js 在OpenShift NodeJS模板上找不到EJS模块,node.js,ejs,openshift,Node.js,Ejs,Openshift,我无法将EJS用作NodeJS上的视图渲染引擎 我发现了几个类似的问题,但都是关于安装真正适用于其他人的EJS的。这对我来说是不一样的,可能是因为我无法为安装选择正确的目录(在OpenShift repo中有如此多的副本) 我有OpenShift模板创建的NodeJS默认应用程序。在安装EJS依赖项时,我不知怎么搞砸了它,我得到了以下错误(不可用模块的标准NodeJS错误): 希望这篇长文章能把我的问题说清楚:)错误是由于使用了不正确的目录。您必须安装软件包并从项目目录运行应用程序。下面是我用

我无法将EJS用作NodeJS上的视图渲染引擎

我发现了几个类似的问题,但都是关于安装真正适用于其他人的EJS的。这对我来说是不一样的,可能是因为我无法为安装选择正确的目录(在OpenShift repo中有如此多的副本)

我有OpenShift模板创建的NodeJS默认应用程序。在安装EJS依赖项时,我不知怎么搞砸了它,我得到了以下错误(不可用模块的标准NodeJS错误):


希望这篇长文章能把我的问题说清楚:)

错误是由于使用了不正确的目录。您必须安装软件包并从项目目录运行应用程序。下面是我用作项目的文件夹的目录结构

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

使用此文件夹中的
npm install
在node_modules子文件夹中添加包文件夹(如
express
socket.io
)。您应该从此位置使用
节点
,因为所有本地安装的模块都只能从此文件夹中看到。

在我的情况下,我只是在package.json中手动添加了EJB:

并运行npm安装(可能需要使用sudo运行)
请注意,默认情况下,ejs查看视图目录

安装ejs时,您必须使用选项--save:

并创建.gitignore文件:

node_modules

我提到的目录结构是由OpenShift平台维护的,因此它可以以标准方式管理构建/部署周期。正如我所看到的,这个结构也和你的一样。虽然这里有很多重复的“repo/”目录,但我还是迷路了。我还尝试安装ejs目录“app root/runtime/”和“app root/runtime/repo”(原始错误跟踪中提到的目录)。我不确定确切原因,但这就是我的问题消失的原因:我在package.json中添加了“express”。这非常奇怪,因为OpenShift上的所有应用程序都可以默认安装express。标记上述答案是正确的,因为它至少提供了一个必要的检查点。
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]);
        }
    };
.
├── app.js
├── node_modules
│   ├── express
│   ├── jade
│   └── socket.io
├── package.json
├── public
│   ├── images
│   ├── javascripts
│   └── stylesheets
├── routes
│   ├── index.js
├── server.js
└── views
    └── layout.jade
 {
   "name": "myApp"
   "dependencies": {
     "express": "^4.12.2",
     "ejs": "^1.0.0"
   }
 }
npm install ejs --save
node_modules