0

node.js アプリケーションに問題があります。パッケージconnectionconnection-routesocket.io、およびejsを使用しています。

私のアプリケーションは、(socket.io 経由で接続された) html ページに情報を提供します。これらの情報は、ejs テンプレートによって管理されます。のようなパラメータで目的地に到達すると、http://localhost:5001/machine/:id2奇妙なことが起こります。接続ルート コードは次のとおりです。

router.get('/machine/:mac_id', function (req, res, next) {
    var mac_index = req.params.mac_id.slice(1,req.params.mac_id.length);
    console.log(mac_index);
    res.writeHead(200, { 'Content-Type': 'text/html' });
    var str = mod_fs.readFileSync(mac_route + '/index.html', 'utf8') ;
    var ret = mod_ejs.render(str, { 
        filename: mac_route,
        title: "Machine Overview",
        /* other informations */
    });
    res.end(ret);
}

変数には、正しくロードされmac_routeたファイルへのパスが含まれています。index.html問題はmac_index変数にあります。コンソールには 3 つの行が表示されます。

id2
unctions.js
query-1.9.1.js

最初の行は明らかに正しく、最後の 2 行は明らかに正しくありません。実際、これらは 2 つの JavaScript ファイル (私functions.jsのファイルと jquery のファイルjquery-1.9.1.js) です。これらのファイルは、index.html ファイルのヘッダーに含まれています。

HTML 構造:

header.html

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title> <%= title %> </title>
        <link rel='stylesheet' href='/style.css' type="text/css"/>
        <script src="http://localhost:5001/socket.io/socket.io.js"></script>
        <script language="javascript" type="text/javascript" src="functions.js"></script>
        <script language="javascript" type="text/javascript" src="jquery-1.9.1.js"></script>
    </head>
    <body>  
        <div id="header">
            ...
        </div>
        <div id="page">

index.html

<% include /header.html %>
<div id="commands">
    ...
</div>
<div id="main">
    ... code of the page, manage informations received ...
</div>
<% include /footer.html %>

footer.html

        <div id="footer">
            ...
        </div>
    </div> <!-- Close the "page" div opened in the header //-->
</body>
</html>

どこが間違っているのかわかりません。ファイルの名前がreqオブジェクトのパラメーターとして使用されるのはなぜですか?

4

1 に答える 1

0

これらのファイルの正規化された URL は次のとおりです。

http://localhost:5001/machine/functions.js
http://localhost:5001/machine/jquery-1.9.1.js

これらはルート ( /machine/:mac_id) と一致するため、それによって処理されます。

ルート のconnect.staticにミドルウェアを含めてみてください:

app.use(connect.static(__dirname));

(これは、Connect アプリがapp変数に格納され、JS ファイルが Node スクリプトと同じディレクトリにあることを前提としています。そうでない場合は__dirname、JS ファイルが配置されているディレクトリを指すように変更します)。

于 2013-03-27T16:47:37.510 に答える