2016-07-15 6 views
0

NodeJSとExpressを使用して単純なAPIを作成しようとしていますが、アプリケーションに外部のJavaScriptコードをインポートする際の問題が発生しています。NodeJSアプリケーションでのファイルのインポートに関する問題」

var express = require("express"); 
var bodyParser = require('body-parser'); 
var fovea = require('../fovea.js'); 
var app = express(); 

app.use(bodyParser.urlencoded({ extended: true })); 
app.use(bodyParser.json()); 

var port = process.env.PORT || 8000; 

var router = express.Router(); 

router.get('/', function(req, res) { 
    res.json({ message: "Welcome to the Fovea API" }); 
    var lay = fovea.Layer2D("red", "layer"); 
    console.log(lay.name); 
}); 

fovea.jsファイルは、私が親ディレクトリに保存されている2つのクラスを含むJSファイルです:私は、次の基本的なテストコードを設定しています。私はルートアドレスにGETリクエストを送信すると、私はにLayer2Dオブジェクトを構築する私の試みによって引き起こされている次のエラーを取得する:

:ここ

TypeError: Object #<Object> has no method 'Layer2D' 
    at Object.app.post.layer [as handle] (/home/daniel/Documents/coding/retina/retina/web/api/server.js:15:18) 
    at next_layer (/home/daniel/Documents/coding/retina/retina/web/api/node_modules/express/lib/router/route.js:103:13) 
    at Route.dispatch (/home/daniel/Documents/coding/retina/retina/web/api/node_modules/express/lib/router/route.js:107:5) 
    at c (/home/daniel/Documents/coding/retina/retina/web/api/node_modules/express/lib/router/index.js:195:24) 
    at Function.proto.process_params (/home/daniel/Documents/coding/retina/retina/web/api/node_modules/express/lib/router/index.js:251:12) 
    at next (/home/daniel/Documents/coding/retina/retina/web/api/node_modules/express/lib/router/index.js:189:19) 
    at Function.proto.handle (/home/daniel/Documents/coding/retina/retina/web/api/node_modules/express/lib/router/index.js:234:5) 
    at Layer.router (/home/daniel/Documents/coding/retina/retina/web/api/node_modules/express/lib/router/index.js:23:12) 
    at trim_prefix (/home/daniel/Documents/coding/retina/retina/web/api/node_modules/express/lib/router/index.js:226:17) 
    at c (/home/daniel/Documents/coding/retina/retina/web/api/node_modules/express/lib/router/index.js:198:9) 

はfovea.jsファイルから関連するクラスのコンストラクタです

function Layer2D(name, graphDiv){ 
    this.name = name; 
    this.graphDiv = graphDiv; 
    this.traces = []; 
    this.hlines = []; 
    this.vlines = []; 
    this.bounds = []; 
    this.visible = true; 
}; 

私は、Ubuntu 14.04 aptリポジトリからインストールされたNodeJS v0.10.25を使用しています。 fovea.jsファイルが適切にインポートされていないようですが、なぜそうなるのかわかりません。どんな助けでも大歓迎です。

+0

.jsのように見える?エラーはこのファイルから発生します。 –

+0

こんにちは@ Pierre-YvesO。、私の更新された質問を参照してください。 – Danny

+0

ちなみに、fovea.jsファイルは、直接実行するとうまく動作します。 – Danny

答えて

2

ので、fovea.jsファイルは次のようになります。あなたがオブジェクトを定義しているとして

// web/fovea.js 
function Layer2D (name, graphDiv) { 
    this.name = name; 
    // ... 
} 

exports.Layer2D = Layer2D; 

、あなたが層をインスタンス化するnewキーワードを使用する必要があります。

`窩をどのよう
// web/api/server.js 

var fovea = require('../fovea.js'); 

// rest of the code 

var lay = new fovea.Layer2D("red", "layer"); 

console.log(lay.name); 
// >> "red" 
+0

これはそれでした!どうもありがとうございました。 – Danny

+0

'' Lay2D = require( '../ fovea.js').Layer2D'そして 'var lay = new Layder2D( '..')' :-)これは、 –

関連する問題