休息Api路线仅适用于生产中的GET

时间:2018-01-07 18:50:14

标签: node.js rest api express passenger

我正在使用Express v4运行node.js rest api。所有路由都通过localhost调试按预期工作。但是在我的服务器上,他们没有。 唯一不同的是,端口侦听是由服务器上的Phusion Passenger完成的(我不能改变它)。这是我的app.js:

const express = require('express'),
  bodyParser = require('body-parser'),
  cors = require('cors'),
  helmet = require('helmet'),
  http = require('http');

var app = express();
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
app.use(cors());
app.use(helmet());

app.use('/', require('./api/routes'));

var server = http.createServer(app);
var port = 'passenger'; // 3000 on localhost
server.listen(port, function () {
  console.log('listening ' + port);
});

这是我的routes.js,适用于本地调试,但不在服务器上:

var express = require('express');
var router = express.Router();

router.get('/api/test', function (req, res, next) {
  console.log(req.route.path);
  console.log(req.route.methods);
  console.log('test get works !');
  res.end('test get works!');
});

router.post('/api/test', function (req, res, next) {
  console.log(req.route.path);
  console.log(req.route.methods);
  console.log('test post works !');
  res.end('test post works!');
});

module.exports = router;

以下是localhost(成功路由)的日志:

20180107_192254 | /api/test
20180107_192254 | { get: true } 
20180107_192254 | test get works ! 

20180107_192350 | /api/test
20180107_192350 | { post: true }
20180107_192350 | test post works !

同一进程的日志文件,但是通过远程服务器完成(我总是被重定向到第一个路由,而req.method总是GET)。虽然'req.route.path'始终是好的,但它永远不会进入预期的功能:

20180107_192757 | /api/test
20180107_192757 | { get: true }
20180107_192757 | test get works ! 

20180107_192759 | /api/test
20180107_192759 | { get: true }
20180107_192759 | test get works ! 

你知道我是否必须在某处更新某些东西(可能是.htaccess,或者在js代码中)?我在Phusion和Express doc上都找不到任何东西。

修改

我通过应用程序直接使用路由来替换快速路由器,它不起作用。

但我注意到了一些事情:

var express = require('express');
var router = express.Router();

router.get('/api/test', function (req, res, next) {
  console.log(req.route.path);
  console.log(req.route.methods);
  console.log('test get works !');
  res.end('test get works!');
});

router.post('/api/test', function (req, res, next) {
  console.log(req.route.path);
  console.log(req.route.methods);
  console.log('test post works !');
  res.end('test post works!');
});

router.get('/api/otherTest', function (req, res, next) {
  console.log(req.route.path);
  console.log(req.route.methods);
  console.log('other test get works !');
  res.end('other test get works!');
});

module.exports = router;

在这里,我可以走第一条和第三条路线。实际上,所有GET路由都有效(并且只有它们)。如果我这样做:

var express = require('express');
var router = express.Router();

router.post('/api/test', function (req, res, next) {
  console.log(req.route.path);
  console.log(req.route.methods);
  console.log('test post works !');
  res.end('test post works!');
});

module.exports = router;

我一无所获。

1 个答案:

答案 0 :(得分:0)

确定。所以我弄明白:我的网站正在将所有 http:// 流量重新路由到 https:// 流量和所有请求(GET,POST,PUT,... )通过 http:// 发送的内容以某种方式转换为GET请求。

通过 https://

,它们都是正确的

我不知道为什么会这样,但如果你这样做,请随时提供更多有关此问题的详细信息!当我发现时,我会更新。