2016-03-06 33 views
0

我目前正在开发一个Ionic应用程序并使用Express在NodeJS中编写服务器并将其托管在Heroku上。但是,它不能正确发布所需的路线。我得到这个错误,当我测试它在Chrome:无法在ExpressJet上的NodeJS服务器上发布参数id

Failed to load resource: the server responded with a status of 404 (Not Found) https://[SERVER NAME].herokuapp.com/rooms//messages 

服务器应张贴ID参数/间之间/和/消息/,但事实并非如此。以下是服务器端代码:

 var messages = []; //make an array to hold messages 
    var rooms = []; 

    app.get('/rooms', function(req, res) { 
     res.json(rooms); 
    }); 

    app.get('/rooms/:id/', function(req, res){ 
     var room = rooms[req.params.id]; 
     res.json(room); 
    }); 

    app.post('/rooms', function(req, res) { 
     var newRoom = { 
      timestamp: new Date() 
      //username: req.body.username 
     }; 
     rooms.push(newRoom); 
     res.json(rooms); 
     console.log(rooms); 
    }); 



    app.get('/messages', function(req, res) { //req = request, res = response 
     res.json(messages); 
    }); 

    app.get('/messages/:id', function(req,res) { 
     var message = messages[req.params.id]; 
     res.json(message); 
    }); 

    app.post('/messages', function(req,res){ 
     var newMessage = { 
      message:req.body.message, 
      username:req.body.username, 
      timestamp: new Date() 
     }; 

     messages.push(newMessage); 
     res.json(messages); 
    }); 

为什么不正确发布正确的路由?当我检查Heroku上的日志时,它看起来并没有得到房间的ID: 谢谢。

编辑:下面是进一步参考GitHub的回购协议: 客户:https://github.com/dukeeagle/ttt-client 服务器:https://github.com/dukeeagle/ttt-server

+0

'的https:// [服务器名称] .herokuapp.com /间// messages'是正确的请求?看看'/ rooms // messages' –

+0

@DmitriyLoskutov你是什么意思?当然,[SERVER NAME]是一个占位符。当我尝试导航到'/ rooms // messages'时,什么都没有出现。 –

+0

你必须声明'/ rooms /:id/messages'路线为'app.get('/ rooms /:id/messages',...'。然后尝试导航到'/ rooms/123/messages '并且你必须得到正确的回应 –

回答

1

我修好了! 下面是那些有兴趣谁正确的路由方法:

app.get('/rooms', function(req, res) { //req = request, res = response 
     var user = users[req.params.id]; 
     var userRooms=[]; 

     res.json(rooms); 
    }); 

    app.get('/rooms/:id', function(req,res) { 
     var room = rooms[req.params.id]; 
     res.json(room); 
    }); 

    app.post('/rooms', function(req,res){ 
     var newRoom = { 
      name:req.body.name, 
      id:rooms.length, 
      username:req.body.username, 
      timestamp: new Date(), 
      messages: [], 
      players: [] 
     }; 
     rooms.push(newRoom); 
     res.json(rooms); 
    }); 

    app.post('/rooms/:id/messages', function(req, res){ 
     var room = rooms[req.params.id]; 
     var newMessage = { 
      username:req.body.username, 
      timestamp: new Date(), 
      message: req.body.message 
     } 
     room.messages.push(newMessage); 
     res.json(room); 
    }); 

    app.post('/rooms/:id/players', function(req, res){ 
     var room = rooms[req.params.id]; 
     var newPlayer = { 
      timestamp: new Date(), 
      player: req.body.username 
     }; 
     room.players.push(newPlayer); 
     res.json(room); 
    }); 
1

我INIT表达与代码服务器:

var express = require('express'); 
var app = express(); 

app.get('/rooms/:id/messages', function (req, res) { 
    var id = req.params.id; 
    res.send('Hello, moto! ' + id); 
}); 

app.listen(2345, function() { 
console.log('server started'); 
}); 

当我浏览到http://localhost:2345/rooms/123/messages我在看页面字符串Hello, moto! 123

尝试删除您的其他路由进行测试,也许它是得到一些冲突。

+0

这不是我所想的找到的应用程序必须导航到'http:// localhost:8100 /#/ rooms/0 /'并查看发送到该特定房间的所有消息的列表。问题是:房间的id –

+0

'app.get'或'app.post'中的第一个参数应该是'path'而不是'hash'的请求URL。在你的情况下路径是''/''。 ,你可以使用'app.get('/',...',然后解析ori的哈希部分ginalURL。查看更多关于它的信息http://expressjs.com/zh/4x/api.html#router.METHOD –

+0

我不确定我关注。你是指什么路径或散列?你链接的文件没有提到这两件事。 –

相关问题