Jade テンプレート ファイルからスクリプト ファイルに変数を渡すにはどうすればよいでしょうか? 質問する

Jade テンプレート ファイルからスクリプト ファイルに変数を渡すにはどうすればよいでしょうか? 質問する

jade テンプレート ファイル (index.jade) で宣言された変数 (config) が JavaScript ファイルに渡されず、JavaScript がクラッシュしてしまうという問題が発生しています。ファイルは次のとおりです (views/index.jade)。

h1 #{title}

script(src='./socket.io/socket.io.js')
script(type='text/javascript')
  var config = {};
  config.address = '#{address}';
  config.port = '#{port}';
script(src='./javascripts/app.js')

以下は私の app.js (サーバー側) の一部です。

  app.use(express.bodyParser());
  app.use(express.methodOverride());
  app.use(app.router);
  app.use(express.static(__dirname + '/public'));
});

app.configure('development', function(){
  app.set('address', 'localhost');
  app.use(express.errorHandler({ dumpExceptions: true, showStack: true }));
});

app.configure('production', function(){
  app.use(express.errorHandler());
});

// Routes

app.get('/', function(req, res){
  res.render('index', {
    address: app.settings.address,
    port: app.settings.port
});
});

if (!module.parent) {
  app.listen(app.settings.port);
  console.log("Server listening on port %d",
app.settings.port);
}

// Start my Socket.io app and pass in the socket
require('./socketapp').start(io.listen(app));

以下はクラッシュする JavaScript ファイルの一部です (public/javascripts/app.js)。

(function() {
        var socket = new io.Socket(config.address, {port: config.port, rememberTransport: false});

私は、localhost (自分のマシン) 上で開発モード (NODE_ENV=development) でサイトを実行しています。デバッグには node-inspector を使用していますが、public/javascripts/app.js で config 変数が未定義であることが分かりました。

何かアイデアはありますか?? ありがとうございます!!

ベストアンサー1

それは少し遅くなりましたが…

script.
  loginName="#{login}";

これは私のスクリプトでは問題なく動作しています。Express では、次のようにしています:

exports.index = function(req, res){
  res.render( 'index',  { layout:false, login: req.session.login } );
};

最近の翡翠は違うのかな?

傭兵

編集: Jade の警告を防ぐためにスクリプトの後に「.」を追加しました。

おすすめ記事