获取Restify REST API服务器以支持HTTPS和HTTP

我正在使用node.js restify ver4.0.3

简单的下面的代码作为一个支持HTTP的简单的REST API服务器。 示例API调用是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); }); 

假设我想支持HTTPS并使API调用https://127.0.0.1:9898/echo/message

如何才能做到这一点?

我注意到restify代码变化非常快,旧版本的代码可能不适用于最新版本。

       

网上收集的解决方案 "获取Restify REST API服务器以支持HTTPS和HTTP"

要使用HTTPS,您需要密钥和证书:

 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); 

您将需要启动两个服务器才能同时访问HTTP和HTTPS:

 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); });. 

要configuration到服务器的路由,请为两个服务器声明相同的路由,根据需要在HTTP和HTTPS之间redirect:

 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 }); 

上面的代码将监听路由/1请求,并将其redirect到处理它的HTTPS服务器。

感谢Bas van Stein的评论,这是一个完整的实例。

  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); });