node.js的连接路由采用错误的参数信息

时间:2013-03-27 16:42:09

标签: node.js socket.io

我的node.js应用程序出了问题。 我使用的是连接连接路由 socket.io ejs

我的应用程序为html页面提供了信息(通过socket.io连接),这些信息由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

第一行显然是正确的,最后两行显然是不正确的,实际上这些是两个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对象的参数?

1 个答案:

答案 0 :(得分: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的目录文件位于)。