2015-11-12 7 views
5

Używam node.js restify ver4.0.3Get restify Serwer REST API do obsługi zarówno HTTP i HTTPS

Prosty kod dodaje działa jako prosty serwer REST API, który obsługuje protokół HTTP. Przykładem wywołanie API jest http://127.0.0.1:9898/echo/message

var restify = require('restify'); 

var server = restify.createServer({ 
    name: 'myapp', 
    version: '1.0.0' 
}); 
server.use(restify.acceptParser(server.acceptable)); 
server.use(restify.queryParser()); 
server.use(restify.bodyParser()); 

//http://127.0.0.1:9898/echo/sdasd 
server.get('/echo/:name', function (req, res, next) { 
    res.send(req.params); 
    return next(); 
}); 

server.listen(9898, function() { 
    console.log('%s listening at %s', server.name, server.url); 
}); 

Załóżmy, że chcemy wspierać HTTPS i nawiązać połączenie API https://127.0.0.1:9898/echo/message

Jak można to zrobić?

Zauważyłem, że restify kodu zmienia się dość szybko, a starszy kod ze starszą wersją może nie działać z najnowszą wersją.

+1

Czy sprawdzić http://qugstart.com/blog/node-js/node-js-restify-server-with-both-http-and-https/? –

+0

Dzięki. Wygląda dobrze. Próbuję przykładu opartego na tym łączu. Niektóre problemy w tej chwili. – user781486

Odpowiedz

9

Aby użyć protokołu HTTPS, trzeba mieć klucz i certyfikat:

var https_options = { 
    key: fs.readFileSync('/etc/ssl/self-signed/server.key'), 
    certificate: fs.readFileSync('/etc/ssl/self-signed/server.crt') 
}; 
var https_server = restify.createServer(https_options); 

będzie trzeba zacząć zarówno serwerów, aby umożliwić zarówno HTTP i HTTPS dostępu:

http_server.listen(80, function() { 
    console.log('%s listening at %s', http_server.name, http_server.url); 
});. 
https_server.listen(443, function() { 
    console.log('%s listening at %s', https_server.name, https_server.url); 
});. 

Aby skonfigurować trasy do serwera, zadeklaruj te same trasy dla obu serwerów, przekierowując między HTTP i HTTPS w razie potrzeby:

http_server.get('/1', function (req, res, next) { 
    res.redirect('https://www.foo.com/1', next); 
}); 
https_server.get('/1', function (req, res, next) { 
    // Process the request 
}); 

Powyższe nasłuchuje żądań na trasie /1 i po prostu przekierowuje je do serwera HTTPS, który je przetwarza.

9

Dzięki komentarzowi Bas van Stein, oto pełny przykład działania.

var restify = require('restify'); 
    var fs = require('fs'); 

    // Setup some https server options 
    //generated from http://www.selfsignedcertificate.com/ 
    var https_options = { 
     key: fs.readFileSync('./HTTPS.key'), //on current folder 
     certificate: fs.readFileSync('./HTTPS.cert') 
    }; 

    // Instantiate our two servers 
    var server = restify.createServer(); 
    var https_server = restify.createServer(https_options); 

    // Put any routing, response, etc. logic here. This allows us to define these functions 
    // only once, and it will be re-used on both the HTTP and HTTPs servers 
    var setup_server = function(app) { 
     function respond(req, res, next) { 
      res.send('I see you ' + req.params.name); 
     } 

     // Routes 
     app.get('/test/:name', respond); 
    } 

    // Now, setup both servers in one step 
    setup_server(server); 
    setup_server(https_server); 

    // Start our servers to listen on the appropriate ports 
    server.listen(9848, function() { 
     console.log('%s listening at %s', server.name, server.url); 
    }); 

    https_server.listen(443, function() { 
     console.log('%s listening at %s', https_server.name, https_server.url); 
    }); 
Powiązane problemy