I would create a data stream , so when I trigger post
route , get
route fetch new data.
So I'm using Socket.io to do that .
first I have a problem when exporting io
variable from server.js
to Nouvproj.js
in my server.js file :
// 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");
});
then in my rooutes I import the variable . and use emit
and on
function to create the stream.
// 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;
Then I get this error
TypeError: Cannot read property 'sockets' of undefined
so Nouvproj.js
is not getting the content of the variable so that I could work with socket.io in this file.
Update : I have updated my files as you described now I'm having this error :
return fn.apply(this, arguments);
^
TypeError: Cannot read property 'apply' of undefined
You always get undefined socket when you want exported socket module.
You can do this issue like this
for your use, you can use process core module of nodejs here is link
// 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;
You can pass io like this:
projects.js -file
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 -file
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);
...
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.