将单独的REST路由从PHP迁移到Node.js / Golang /等等

时间:2017-06-02 11:31:05

标签: php node.js rest nginx

此时我的REST API在PHP上运行,并且在Apache2 / Nginx后面运行(实际上在Apache2上,正在进行到Nginx的迁移),但在阅读了Golang和Node.js的性能以供休息之后,我正在考虑将我的REST从PHP迁移到这种变体之一,但我遇到的问题是如何只迁移一些路由,而不是整个REST。

例如现在我有两条路线

/users/articles

apache正在侦听80端口,然后用PHP帮助返回响应,但是如果我想将/articles迁移到Node.js怎么办?如果Node.js位于不同的端口,我的网络服务器将如何知道/articles需要调用Node.js,但是/users仍然使用PHP?

2 个答案:

答案 0 :(得分:1)

您可以设置新的Node.js REST API以使用旧的PHP REST API,并在准备好后替换Node.js REST API中的端点。

以下是使用Hapi.js的示例(但您可以使用任何Node.js RESTful框架):

const Hapi = require('hapi');
const request = require('request');

const server = new Hapi.Server();
server.connection({ port: 81, host: 'localhost' });

server.route({
    method: 'GET',
    path: '/new',
    handler: (req, reply) => {
        reply('Hello from Node.js API');
    }
});

server.route({
    method: 'GET',
    path: '/{endpoint}',
    handler: (req, reply) => {
        request.get(`http://localhost:80/${req.params.endpoint}`)
            .on('response', (response) => {
            reply(response);
         });
    }
});

server.start((err) => {
    if (err) {
        throw err;
    }
    console.log(`Server running at: ${server.info.uri}`);
});

您可以在同一台服务器上运行PHP和Node.js(使用不同的端口),但您最好在同一网络中的不同服务器上运行它们。一旦您移动了所有端点,您就不希望服务器上有PHP /等。

答案 1 :(得分:0)

从我的同事那里找到了非常好的解决方案,只需处理nginx请求并重定向到另一台服务器,如果请求uri包含的内容,如下所示:

server {
    listen 127.0.0.1:80;
    server_name localhost.dev;
    location ~* ^/[a-zA-Z0-9]+_[a-zA-Z0-9]+_(?<image_id>[0-9]+).* {
        include             proxy_headers.conf;
        proxy_set_header    X-Secure     False;
        add_header          X-Image-Id   $image_id;
        access_log          off;
        proxy_pass http://localhost-image-cache;
        proxy_next_upstream off;
    }
}

upstream localhost-image-cache {
hash $server_name$image_id consistent;
    server 127.0.0.1:81 max_fails=0;
    keepalive 16;
}