1. ホーム
  2. javascript

[解決済み] jadeテンプレートファイルからスクリプトファイルへ変数を渡すには?

2022-08-01 20:13:42

質問

私は、javascriptファイルに渡されないjadeテンプレートファイル(index.jade)で宣言された変数(config)に問題があり、それは私の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で未定義であることを教えてくれました。

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

どのように解決するのですか?

これは 小さい 遅ればせながら...

script.
  loginName="#{login}";

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

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

最新の翡翠は違うんでしょうかね?

メルカリです。

edit: Jadeの警告を防ぐため、スクリプトの後に"."を追加しました。