我有一個index.js檔案,其中:
- 初始化我的 Express 應用實體
- 包含一個
router.js定義 POST 端點的檔案 - 創建一個 Socket.IO 物件
代碼如下:
const http = require("http");
const express = require("express");
const router = require("./src/router");
// Create Express webapp
const app = express();
// Create http server and run it
const server = http.createServer(app);
const port = process.env.PORT || 3000;
//Create Socket.IO instance
const io = require('socket.io')(server,{
cors: {
origin: "http://localhost:3000",
methods: ["GET", "POST"],
credentials:true
}
});
const cors = require('cors');
在 POST 端點router.js,我想像這樣使用 Socket.IO 物件:
const Router = require("express").Router;
const router = new Router();
router.post("/call",(req, res)=>{
let data = req.body;
let response = {
something:`${data.userID} requested a call length ${data.minutes}`
}
io.broadcast.emit(response);
res.send(JSON.stringify(response));
});
module.exports = router;
但這給了我錯誤:
ReferenceError: io is not defined
如何使該io物件可用于此router.post()呼叫?我嘗試通過以下方式使其成為全球性的index.js:
global.io = io;
但隨后 POST 呼叫給了我這個錯誤:
TypeError: Cannot read property 'emit' of undefined
還嘗試io在函式中包含作為引數,module.exports例如:
const Router = require('express').Router;
const { tokenGenerator, voiceResponse } = require('./handler');
module.exports = function(io) {
const router = new Router();
router.post('/call', (req, res)=>{
const data = req.body;
const response = {
something: `${data.userID} requested a call length ${data.minutes}`,
}
io.broadcast.emit(response);
res.send(JSON.stringify(response));
});
return router;
}
然后要求路由器index.js像:
const router = require('./src/router')(io);
但這給出了同樣的Cannot read property 'emit' of undefined錯誤。
uj5u.com熱心網友回復:
仔細閱讀錯誤資訊。
但這給出了相同的無法讀取未定義錯誤的屬性“發出”。
你成功通過了io。
問題是io.broadcast它undefined不能擁有emit財產。
您可以broadcast在套接字物件上找到,而不是在服務器物件本身上找到。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/504232.html
標籤:javascript 节点.js 表示 套接字.io
上一篇:如何在Angularsubscribe()中獲取API結果的值?
下一篇:帶有JS的可折疊直接下拉選單
