我正在将Sails.js与Vue.js一起使用标准的Sails.js Web应用程序构建。 我使用的版本是:
我正在尝试构建具有多个不同游戏室的应用程序,每个游戏室还具有聊天功能。所有房间都有唯一的URL。
我尝试了所有可以在Sails.js手册中找到的内容,也可以在socket.io中找到。问题似乎仅在使用io.socket.post函数时存在。
我的路由如下:
// The dir = Game file = playing and we need the gameId, partyId and PartyString.
'GET /game/playing/:gameId/:partyId/:partyString':
{ action: 'game/view-playing', locals: { layout: 'layouts/layout-play' } },
'POST /game/playing/:gameId/:partyId/:partyString':
{ action: 'game/view-playing', locals: { layout: 'layouts/layout-play' } },
// The dir = Game file = playing and we need the gameId, partyId, PartyString and the action ( The action receives: on-connect, chat, etc)
'GET /game/playing/:gameId/:partyId/:partyString/:action':
{ action: 'game/view-playing', locals: { layout: 'layouts/layout-play' } },
'POST /game/playing/:gameId/:partyId/:partyString/:action':
{ action: 'game/view-playing', locals: { layout: 'layouts/layout-play' } },
我的view-playing.js控制器如下所示:
fn: async function (inputs) {
switch (inputs.action) {
case 'on-connect':
console.log("action: on-connect");
var partyInfo = await Party.findOne({ id: 1, game: 1 });
sails.sockets.join(this.req, partyInfo.partyChatroomName);
var chatData = partyInfo.chat;
if(chatData.usernames.indexOf(this.req.me.username) === -1) {
chatData.usernames.push(this.req.me.username);
}
await Party.update({ id: partyInfo.id }).set({ chat: chatData });
return this.res.ok({ user: this.req.me, userList: chatData.usernames });
break;
仍然认为这不是出错的部分。 因为当我转到layout.ejs(实际上是layout-play.ejs)中的代码时,我猜错了代码。
$(document).ready(function(){
var url = window.location.href.replace(window.location.protocol + "//" + window.location.hostname, '');
io.socket.on('connect', function(){
console.log("connected");
io.socket.post(url+'/on-connect', { _csrf: window.SAILS_LOCALS._csrf } ,function(data, data2){
console.log("Data2: " + data2.statusCode);
for (var i = 0; i < data.userList.length; i++) {
content = "<li>" + data.userList[i] + "</li>";
$(".chat-page .user-list").append(content);
}
});
io.socket.post(url+'/load-save', { _csrf: window.SAILS_LOCALS._csrf } ,function(data, data2){
// console.log("Data2: " + data2.body);
// console.log("Data2: " + data2.headers);
// console.log("Data2: " + data2.statusCode);
// console.log("Data2: " + data2.error);
});
io.socket.on('disconnect', function(){
io.socket.post(url+'/disconnect', { _csrf: window.SAILS_LOCALS._csrf }, function(data, data2){
console.log("Socket disconnected" + data);
});
});
});
如您所见,io.socket.on('connect')可以正常工作,但并非总是如此,但在大多数情况下,通过Connected返回响应即可。 之后,您会看到3 io.socket.post请求,其中的CLI响应均给出500错误:
action: load-save
error: Sending 500 ("Server Error") response:
{ Error: Not implemented in core yet
at MockServerResponse._renderShim [as render] (/home/nodejs/VaultDungeon/node_modules/sails/lib/router/res.js:333:40)
at MockServerResponse.res.view (/home/nodejs/VaultDungeon/node_modules/sails/lib/hooks/views/res.view.js:336:16)
at /home/nodejs/VaultDungeon/node_modules/machine-as-action/lib/machine-as-action.js:1009:30
at afterwards (/home/nodejs/VaultDungeon/node_modules/machine-as-action/lib/machine-as-action.js:1024:17)
at _waitForSimulatedLatencyIfRelevant (/home/nodejs/VaultDungeon/node_modules/machine-as-action/lib/machine-as-action.js:620:50)
at Object.respondApropos [as success] (/home/nodejs/VaultDungeon/node_modules/machine-as-action/lib/machine-as-action.js:622:11)
at /home/nodejs/VaultDungeon/node_modules/machine/lib/private/help-build-machine.js:1517:30
at proceedToFinalAfterExecLC (/home/nodejs/VaultDungeon/node_modules/parley/lib/private/Deferred.js:1157:14)
at proceedToInterceptsAndChecks (/home/nodejs/VaultDungeon/node_modules/parley/lib/private/Deferred.js:913:12)
at proceedToAfterExecSpinlocks (/home/nodejs/VaultDungeon/node_modules/parley/lib/private/Deferred.js:845:10)
at /home/nodejs/VaultDungeon/node_modules/parley/lib/private/Deferred.js:303:7
at /home/nodejs/VaultDungeon/node_modules/machine/lib/private/help-build-machine.js:953:53
at Function.handlerCbs.success (/home/nodejs/VaultDungeon/node_modules/machine/lib/private/help-build-machine.js:814:26)
at /home/nodejs/VaultDungeon/node_modules/machine/lib/private/help-build-machine.js:1044:42
at <anonymous>
at process._tickDomainCallback (internal/process/next_tick.js:229:7) statusCode: 501 }
<- POST /game/playing/1/4/4abb2c1a67cde7f81a0adf3117519498/load-save (11ms 500)
| view: pages/game/playing
但是当我从io.socket.post中删除_csrf时,我收到以下消息:错误:服务器以403状态码响应:禁止。
有人看到错误或对此有其他看法可以帮助我吗? 感谢所有帮助