0

学習の一環として、アプリを nodejitsu にデプロイしたいと考えていました。私のローカルサーバーでは正常に動作していますが、nodejitsuではすべてが得られます

Cannot GET /

サーバー上でNODE_ENVが本番環境に設定されていることに関係があるのではないかと思いましたが、ローカルサーバーではこれに触れたことはありません。ノードジツで開発に変更しましたが、それでも動作しません。

すべてのコードにコメントした後、問題は以下に示す index.js にあると思います。

var express = require('express');//the framework
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
//var session = require('express-session');
var methodOverride = require('method-override');
var passport = require("passport");//for authentication
var LocalStrategy = require('passport-local').Strategy;//local users for passport
var http = require('http');
var path = require('path');
var db = require('./dataBase');//to connect to the db
var userRoles = require('./routingConfig').userRoles;
var accessLevels = require('./routingConfig').accessLevels;

var debug = false;

var db = new db('inmobiliaria', 'localhost', 3306, debug);

require('./passport')(passport, db, debug)
var app = express();

app.set('port', 1337);
app.use(methodOverride());
app.use(cookieParser());
app.use(bodyParser.urlencoded({ extended: false }))
//app.use(session({ secret: 'SECRET' }));
app.use(passport.initialize());
app.use(passport.session());

app.use(function (req, res, next) {
    var role = userRoles.public;//default role
    var username = '';

    if (req.user) {
        role = req.user.role;
        username = req.user.username;
    }
    res.cookie('user', JSON.stringify({
        'username': username,
        'role': role
    }));

    next();
});

app.use('/', express.static(path.join(__dirname + '/../Client/')));
app.use("/lib", express.static(path.join(__dirname + '/../Client/lib/')));
app.use("/ctr", express.static(path.join(__dirname + '/../Client/Controllers/')));
app.use("/media", express.static(path.join(__dirname + '/../Client/media/')));
app.use("/views", express.static(path.join(__dirname + '/../Client/Views/')));
app.use("/srv", express.static(path.join(__dirname + '/../Client/Services/')));
app.use("/dct", express.static(path.join(__dirname + '/../Client/Directives/')));

require('./routes')(app, passport, db);
//require('./emailConfiguration');

http.createServer(app).listen(process.env.PORT || app.get('port'), function (err) {
    console.log("Express server listening on port " + app.get('port'));
    if (err) {
        throw err; // For completeness's sake.
    }
});

この変数について調査しましたが、それと関係があるかどうかはわかりません。これはhttp://horaciotest.jit.su/の URLです。この構成ですか?私はしてはいけないことをしていますか?

お時間をいただきありがとうございます。

編集:

エラーケースを数行に減らすことができたと思います。nodejitsu の人たちが提案したように、私は今モジュール node-static を使用して静的ファイルを提供しようとしていますが、エクスプレスに沿って動作させることはできません:

このコードはnodejitsuと私のローカルサーバーで動作します(または少なくともエラーは表示されません)

var statik = require('node-static');
var http = require('http');
var path = require('path');

var file = new (statik.Server)(path.join(__dirname + '/../Client/'));//index.html here
http.createServer(function (req, res) {
    console.log(path.join(__dirname + '/../Client/'));
    file.serve(req, res);
}).listen(8080);

しかし、エクスプレスを追加するとすぐに、上記のエラーが発生します。

var express = require('express');    
var statik = require('node-static');
var http = require('http');
var path = require('path');

var app = express();

var file = new (statik.Server)(path.join(__dirname + '/../Client/'));//index.html here
http.createServer(app, function (req, res) {
    console.log(path.join(__dirname + '/../Client/'));
    file.serve(req, res);
}).listen(8080);

Express アプリを追加するとエラーが発生する理由を教えてもらえますか? これをnodejitsuで動作させるために必要なものかもしれません、ありがとう!

4

1 に答える 1

1

私は問題が何であるかを知りました、それが誰かを助けることを願っています:

私のプロジェクト構造には 2 つのフォルダーがありました。1 つは Client という名前で、すべての html と .js は angular where からのものです。もう 1 つのフォルダーは WebServer で、そこにはすべての nodejs ファイルがありました。

nodejitsu にデプロイするには、次のコマンドを実行します。jitsu deployこれにより、別のコマンドが実行されますnpm pack。このコマンドは、node_modules ファイルと で始まるファイルを除く、nodejs ディレクトリ内のすべてのデータを含む .tgz ファイルを作成します.。問題は、そのフォルダーの外にファイルがある場合、それらが含まれないことです。

解決策は、クライアント フォルダーを nodejs フォルダー内に移動することです。サーバーに送信する必要があるものはすべて、このフォルダー内にある必要があります。

于 2014-08-27T01:21:08.897 に答える