[英]Error when exporting socket.io variable in ExpressJs server
我將創建一個數據流,因此當我觸發post
route時, get
route獲取新數據。
所以我正在使用Socket.io來做到這一點。
首先,將io
變量從server.js
導出到Nouvproj.js
在我的server.js文件中:
// server.js
// BASE SETUP
// =============================================================================
// call the packages we need
var express = require("express"); // call express
var app = express();
var bodyParser = require("body-parser");
var port = process.env.PORT || 8081; // set our port
app.use(function(req, res, next) {
res.header("Access-Control-Allow-Credentials", "true");
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Methods", "GET, POST, PUT ,DELETE");
res.header(
"Access-Control-Allow-Headers",
"Origin, X-Requested-With, Content-Type, Accept"
);
next();
});
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
app.get("/", function(req, res) {
res.sendFile(__dirname + "../src/index.html");
});
var server = app.listen(port);
var io = require("socket.io").listen(server);
// define our app using express
var routerProj = require("./routes/ajoutProj")(io);
app.use("/api/proj", routerProj);
var mongoose = require("mongoose");
mongoose.Promise = global.Promise;
mongoose.connect("mongodb://localhost:27017", {
useMongoClient: true
/* other options */
}); // connect to our database
mongoose.connection.on("error", function(error) {
console.log("error", error);
});
// Chargement de socket.io
// Quand un client se connecte, on le note dans la console
// START THE SERVER
// =============================================================================
io.sockets.on("connection", function(socket) {
console.log("socket");
});
然后在我的路由中導入變量。 並使用emit
和on
函數創建流。
// ROUTES FOR OUR API
var express = require("express"); // call express
var NouvProj = require("../app/models/nouvProj");
var mongoose = require("mongoose");
var Soc = require("../server");
var io = Soc.io;
var router = express.Router(); // get an instance of the express Router
router.use(function(req, res, next) {
// do logging
console.log("Something is happening.");
next(); // make sure we go to the next routes and don't stop here
});
// test route to make sure everything is working (accessed at GET http://localhost:8080/api)
module.exports = function(io) {
router
.route("/projets")
// create a nouvProj (accessed at POST http://localhost:8080/api/nouvProjs)
.post(function(req, res) {
var nouvProj = new NouvProj();
// create a new instance of the nouvProj model
nouvProj.nomProj = req.body.nomProj;
nouvProj.leadProj = req.body.leadProj;
nouvProj.descProj = req.body.descProj;
nouvProj.BesProj = req.body.BesProj;
nouvProj.pers = req.body.pers;
nouvProj.backlog.fonctionnalite = req.body.Fonctionnalite;
nouvProj.backlog.userStory = req.body.UserStory;
// save the nouvProj and check for errors
nouvProj.save(function(err) {
if (err) {
res.send(err);
console.log("err");
}
res.json({
message: "nouvProj created!"
});
io.sockets.emit("added", function() {
console.log("Un projet est ajouté !");
});
});
})
.get(function(req, res) {
NouvProj.find(function(err, nouvProjs) {
if (err) res.send(err);
else {
io.sockets.on("added", function() {
res.json(nouvProjs);
});
}
});
});
router.get("/", function(req, res) {
res.json({
message: "hooray! welcome to our api!"
});
});
}
// more routes for our API will happen here
module.exports = router;
然后我得到這個錯誤
TypeError: Cannot read property 'sockets' of undefined
因此Nouvproj.js
無法獲取變量的內容,因此我可以在此文件中使用socket.io。
更新 :我已經按照您的描述更新了我的文件,但出現此錯誤:
return fn.apply(this, arguments);
^
TypeError: Cannot read property 'apply' of undefined
要導出套接字模塊時,始終會得到未定義的套接字。
你可以這樣做
供您使用,您可以使用nodejs的流程核心模塊,這里是鏈接
// ROUTES FOR OUR API
var express = require("express"); // call express
var NouvProj = require("../app/models/nouvProj");
var mongoose = require("mongoose");
var router = express.Router(); // get an instance of the express Router
router.use(function(req, res, next) {
// do logging
console.log("Something is happening.");
next(); // make sure we go to the next routes and don't stop here
});
// test route to make sure everything is working (accessed at GET http://localhost:8080/api)
router
.route("/projets")
// create a nouvProj (accessed at POST http://localhost:8080/api/nouvProjs)
.post(function(req, res) {
var nouvProj = new NouvProj();
// create a new instance of the nouvProj model
nouvProj.nomProj = req.body.nomProj;
nouvProj.leadProj = req.body.leadProj;
nouvProj.descProj = req.body.descProj;
nouvProj.BesProj = req.body.BesProj;
nouvProj.pers = req.body.pers;
nouvProj.backlog.fonctionnalite = req.body.Fonctionnalite;
nouvProj.backlog.userStory = req.body.UserStory;
// ROUTES FOR OUR API
var express = require("express"); // call express
var NouvProj = require("../app/models/nouvProj");
var mongoose = require("mongoose");
var Soc = require("../server");
var io = Soc.io;
var router = express.Router(); // get an instance of the express Router
router.use(function(req, res, next) {
// do logging
console.log("Something is happening.");
next(); // make sure we go to the next routes and don't stop here
});
// test route to make sure everything is working (accessed at GET http://localhost:8080/api)
router
.route("/projets")
// create a nouvProj (accessed at POST http://localhost:8080/api/nouvProjs)
.post(function(req, res) {
var nouvProj = new NouvProj();
// create a new instance of the nouvProj model
nouvProj.nomProj = req.body.nomProj;
nouvProj.leadProj = req.body.leadProj;
nouvProj.descProj = req.body.descProj;
nouvProj.BesProj = req.body.BesProj;
nouvProj.pers = req.body.pers;
nouvProj.backlog.fonctionnalite = req.body.Fonctionnalite;
nouvProj.backlog.userStory = req.body.UserStory;
// save the nouvProj and check for errors
nouvProj.save(function(err) {
if (err) {
res.send(err);
console.log("err");
}
res.json({
message: "nouvProj created!"
});
process.emit("added", function() {
console.log("Un projet est ajouté !");
});
});
})
.get(function(req, res) {
NouvProj.find(function(err, nouvProjs) {
if (err) res.send(err);
else {
process.on("added", function() {
res.json(nouvProjs);
});
}
});
});
router.get("/", function(req, res) {
res.json({
message: "hooray! welcome to our api!"
});
});
// more routes for our API will happen here
module.exports = router;
// save the nouvProj and check for errors
nouvProj.save(function(err) {
if (err) {
res.send(err);
console.log("err");
}
res.json({
message: "nouvProj created!"
});
process.emit("added", function() {
console.log("Un projet est ajouté !");
});
});
})
.get(function(req, res) {
NouvProj.find(function(err, nouvProjs) {
if (err) res.send(err);
else {
process.on("added", function() {
res.json(nouvProjs);
});
}
});
});
router.get("/", function(req, res) {
res.json({
message: "hooray! welcome to our api!"
});
});
// more routes for our API will happen here
module.exports = router;
您可以像這樣通過io:
projects.js-文件
var express = require("express");
var router = express.Router();
module.exports = function (io) {
router.get('/something', ..., function (req, res) {
io.sockets.on('connection', function (socket) {
... do something
})
})
}
server.js文件
var express = require("express"); // call express
var app = express();
var bodyParser = require("body-parser");
...
...
var server = app.listen(port)
var io = require("socket.io").listen(server);
var projects = require('./routes/projects')(io);
app.use('/projects', projects);
...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.