【问题标题】:Express socket.io routes does not POSTExpress socket.io 路由不发布
【发布时间】:2018-02-02 22:16:09
【问题描述】:

我无法在快速路由中使用套接字进行 POST。在我的服务器代码下方出现错误"Cannot POST /send"

app.js

var express = require('express');
var path = require('path');
var app = express();
var server = require('http').createServer(app);
var io = require('socket.io')(server);
var bodyParser = require('body-parser');
var session = require('express-session');


app.use(express.static(__dirname + '/node_modules'));
app.use("/css", express.static(__dirname + '/css'));
app.use("/js", express.static(__dirname + '/js'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));


var aws_router = require('./routes/aws')(io);
var another_routes = require('./routes/another.js')(app);


app.get('/', function (req, res) {
    res.sendFile(path.join(__dirname + '/index.html'));
});


server.listen(8080);

在我的 routes/aws.js 中,我基本上可以读取/写入数据库

var express = require('express');
var router = express.Router();
var bodyParser = require('body-parser');
var path = require('path');
var process = require('process');

var aws_router = function(io){

  router.post('/view', function(req, res) {
    //need to read from database
    var email = req.body.emailView;
    var paramsRead = {
        TableName: tableNameShopper,
        Key:{
            "email": email
        }
    };

    readFromTable(paramsRead).then((results) => {
        var objShopper = JSON.parse(results);
            if(results =="{}"){
          //nothing to do
          console.log("got null");
        }
        else{
          io.sockets.emit("viewdata", objShopper);
        }
        //res.json(request.objShopper)
      });

      res.sendFile(path.join(process.cwd() + '/view.html'));
  });
 return router;
} 

module.exports = aws_router;

我可以在没有 socket.io 的情况下进行 POST,但是当我添加 socket.io 功能时,我无法进行 POST。我遵循this 示例但没有帮助

我错过了什么?

【问题讨论】:

  • app.js 中,aws_router 永远不会挂接到您的 Express 应用程序中。你需要app.use(somePath, aws_router)

标签: node.js express socket.io


【解决方案1】:

你忘记在aws_router函数结束时返回路由器实例:

var aws_router = function(io) {

    ...

    return router;
} 

module.exports = aws_router;

另外,您应该告诉 express 使用创建的路由模块routes/aws.js,方法是添加以下行:

app.use('/', aws_router);

【讨论】:

  • 我有return router;在代码中但忘记粘贴[见编辑]。添加app.use('/', aws_router); 后,我得到以下错误TypeError: Router.use() requires a middleware function but got a undefined at Function.use
  • 您必须在 app.js 文件中的 var another_routes = require('./routes/another.js')(app); 之后添加 app.use('/', aws_router);
  • 以不同的方式解决了这个问题。但现在问题不同了。看到这个线程stackoverflow.com/questions/48592536/…
猜你喜欢
  • 1970-01-01
  • 2016-09-20
  • 2020-10-22
  • 2016-08-22
  • 2017-09-12
  • 2015-09-07
  • 2021-05-14
  • 2014-06-10
  • 1970-01-01
相关资源
最近更新 更多