req.params.id返回多个值?

时间:2016-10-14 07:05:05

标签: javascript node.js express

我有一个表单,在提交后,会在我的聊天应用中重定向到" / room / roomnum"。在重定向时,会显示chat.html。但在app.get里面,我有房间/:id,以及' id'应该具有表格中输入的房间号码的值。

   app.post("/user", urlencodedParser, function(req,res) {
        res.redirect("/room/" + req.body.roomnum);
    });
    app.get("/room/:id", function(req,res) {
        res.sendFile(__dirname + "/chat.html");
        console.log(req.params.id);
    });

但是,我在控制台中获得了多个值 -

CONSOLE OUTPUT -

  

roomnum
  style.css中
  的script.js

当我在console.log(req.params.id)时,我不能只得到房间号吗?

更新 - 应用的主要部分

//routing
app.get("/", function(req, res) {
    res.render("login", {rooms: rooms});
});
app.post("/user", urlencodedParser, function(req,res) {
    res.redirect("/room/" + req.body.roomnum);
});
app.get("/room/:id", function(req,res) {
    res.sendFile(__dirname + "/chat.html");
    //console.log(req.params.id);
});
app.use(express.static("static_files"));

//handling socket connection
io.on("connection", function(socket) {
    //console.log(socket.handshake.address + " joined ");
});

1 个答案:

答案 0 :(得分:2)

我认为这里有两个问题:

  • chat.html中,您使用相对路径(没有前导/)来加载style.cssscript.js;
  • 你宣布静态中间件为时已晚。

由于存在这些问题,style.csschat.html的请求被"翻译"至/room/style.css,与/room/:id路线相匹配。它也永远不会因为这个而触及静态中间件(当路由匹配并处理请求时,任何后续的路由处理程序都不会被调用)。

所以:

  • 使用资源的绝对路径:/style.css(或/css/style.css或其他任何内容,具体取决于您构建static_files目录的方式)
  • 在路线之前将静态中间件移至

    app.use(express.static("static_files"));
    //routing
    app.get("/", function(req, res) { ... }).