POST请求后执行模块

我正试图集成通过套接字发送实时信息(使用socket.io ),并使用OneSignal平台发送推送通知。

如果我把所有的东西放在同一个模块中,我不知道为什么发送通知的方法在信息发送之后,或者在发送信息之前没有执行。

如果我运行命令npm start,没有错误出现,但是一旦本地或远程服务器运行,通知就会到达,这样我就不希望发生这种情况。

user.js的

var express = require('express'); var router = express.Router(); var misocket = require('../routes/misocket'); var notificacion = require('../routes/notificacion'); /* run module when start server run, i don't want it notificacion(); */ /* GET users listing. sendnote*/ router.post('/sendasig', function(req, res, next) { console.log(misocket);//registrednote misocket.emit("registrar",req.body); //run here, after the send data across post request notificacion(); console.log(req.body); res.status(200).json({ message : "send message" }); }); module.exports = router; 

notificacion.js

  module.exports = function(){ var OnesignalNotificationApi = require('onesignal-notification'); var api = new OnesignalNotificationApi('N2FkY2ZkZWQtMGQ2MS00ZTUwLTlkM2QtODA2NmE0YjBiMzQ3', 'c4b92cce-4d59-4550-a4be-20939370e39c'); var message = { it: 'Some message', en: 'Some message', es: 'Nueva Calificacion' }; api.sendToAll(message, null, function(err, res){ console.log(err); console.log(res); }); }; 

index.js

 var express = require('express'); var router = express.Router(); /* GET home page. */ router.get('/', function(req, res, next) { res.render('index', { title: 'Express' }); }); module.exports = router; 

misocket.js

 var i = 0; var ioapp; exports.connection= function(io){ ioapp = io; io.on('connect',function(s){ console.log("Conectado"); }); }; exports.io = ioapp; 

在你的notification.js文件中,当文件是必需的时,sendToAll函数将被执行(这可能是在你运行的时候)。

 api.sendToAll(message, null, function(err, res){ console.log(err); console.log(res); }); 

你将要包装在一个函数中,并称之为你的邮政路线。

 module.exports = function(message){ api.sendToAll(message, null, function(err, res){ console.log(err); console.log(res); }); } 

然后可以在您的服务器的顶部需要

  const sendMessageFunction = require('path/to/notification.js') . . . sendMessageFunction('helloWorld') 

用下面的代码replace您的notification.js

  module.exports = function(){ var sendNotification = function (data) { var headers = { "Content-Type": "application/json; charset=utf-8", "Authorization": "Basic N2FkY2ZkZWQtMGQ2MS00ZTUwLTlkM2QtODA2NmE0YjBiMzQ3" }; var options = { host: "onesignal.com", port: 443, path: "/api/v1/notifications", method: "POST", headers: headers }; var https = require('https'); var req = https.request(options, function (res) { res.on('data', function (data) { console.log("Response:"); console.log(JSON.parse(data)); }); }); req.on('error', function (e) { console.log("ERROR:"); console.log(e); }); req.write(JSON.stringify(data)); req.end(); }; var message = { app_id: "c4b92cce-4d59-4550-a4be-20939370e39c", contents: {"en": "sample message"}, included_segments: ["All"] }; sendNotification(message); }; 

你尝试编辑user.js是这样的:

 var express = require('express'); var router = express.Router(); var misocket = require('../routes/misocket'); var notificacion = require('../routes/notificacion'); var OnesignalNotificationApi = require('onesignal-notification'); var api = new OnesignalNotificationApi('N2FkY2ZkZWQtMGQ2MS00ZTUwLTlkM2QtODA2NmE0YjBiMzQ3', 'c4b92cce-4d59-4550-a4be-20939370e39c'); /* GET users listing. sendnote*/ router.post('/sendasig', function(req, res, next) { console.log(misocket);//registrednote misocket.emit("registrar",req.body); //run here, after the send data across post request notificacion(api); console.log(req.body); res.status(200).json({ message : "send message" }); }); module.exports = router; 

和notification.js是这样的:

 module.exports = function(api){ var message = { it: 'Some message', en: 'Some message', es: 'Nueva Calificacion' }; api.sendToAll(message, null, function(err, res){ console.log(err); console.log(res); }); };