2016-08-17 23 views
1

グラフを生成する別のファイルにクライアント側のjavascriptを持つExpressプロジェクトがあります。グラフを描画できるように、私はエクスプレスルートからこのjavascriptファイルに変数を渡そうとしています。 以下のコードを試しましたが、次のエラーが発生しています。Express、ルートからクライアント側にあるJSファイルに変数を渡す方法

Error: Cannot find module 'js'

app.get('/users', function(req, res) { 
    res.render(path.join(__dirname, '../views/js/users_chart.js'), { 
    'users': users 
    }); 
}); 
+0

'views/js /'フォルダはありますか? – Craicerjack

+0

JSファイルに 'res.render()'を使うことはできません。 'res.render()'は[View Engine](https://github.com/expressjs/express/wiki? _ga = 1.12046708.1350534868.1471455458#template-engines)。 – peteb

+0

@Craicerjackはい私はviews/js/folderを持っています – Ramez

答えて

0

として有用である、解決策を見つけました。

経路から変数を受け取るクライアント側にjavascriptファイルを持たせるには、JSONの変数をルートファイルからクライアント側のjavascriptファイルに送信する必要がありました。私はクライアント側のjavascriptファイルでJSONを受け取るためにXMLHttpRequestを使用しました。

ベローは、クライアントサイドのjavascriptファイルであるusers_graph.jsのコードです。

var xmlhttp = new XMLHttpRequest(); 
var url = "/users"; 
xmlhttp.onreadystatechange = function() { 
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { 
     var users = JSON.parse(xmlhttp.responseText).users; 
     // do something with the users variable that was passed by the routes 

    } 
}; 

xmlhttp.open("GET", url, true); 
xmlhttp.setRequestHeader('Accept', 'application/json'); 
xmlhttp.send(); 
0

は、私はあなたがJSファイルをレンダリングすることはできませんres.renderserving static files

用Expressのドキュメントを確認することが有用であると思います。あなたが

/* server.js */ 
app.set('view engine', 'ejs'); 
app.register('.html', require('ejs')); 
// serve your js statically 
app.use('/js', path.join(__dirname, '../views/js/users_chart.js') 
app.get('/users', function(req, res) { 
    // pass variable to html page 
    res.render('users.html', { 
     'users': users 
    }); 
}); 

// in users.html 
<script type="text/javascript" src="/js/users_chart.js"> 

This postであなたの静的user_chart.jsを提供したい見える

は大きな助けを受けた後、おそらくうまく

+1

最新のバージョンのExpressでは、新しいビューエンジンを登録するために 'app.register'は使用されていません。代わりに、 'app.set( 'html'、require( 'ejs')。renderFile);'を使用して 'app.set( 'view engine'、ejs)​​;'を使用すると、新しいエンジンを指定することもできます。 [here](http://expressjs.com/en/guide/using-template-engines.html)を参照してください。 – peteb

+0

users_chartは静的ではありません。ユーザーの変数をそのルートに渡そうとしています。問題の原因は何ですか。 – Ramez

+0

@Ramez答えの残りの部分を読みましたか?レンダリングしたHTML文字列をクライアントに送信する* – Craicerjack

関連する問題