我正在使用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;
我一无所获。
答案 0 :(得分:0)
确定。所以我弄明白:我的网站正在将所有 http:// 流量重新路由到 https:// 流量和所有请求(GET,POST,PUT,... )通过 http:// 发送的内容以某种方式转换为GET请求。
通过 https:// 。
,它们都是正确的我不知道为什么会这样,但如果你这样做,请随时提供更多有关此问题的详细信息!当我发现时,我会更新。