让restify REST API服务器同时支持HTTPS和HTTP
Get restify REST API server to support both HTTPS and 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代码变化非常快,旧版本的旧代码可能无法与最新版本一起使用。
要使用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);
});.
要配置到服务器的路由,请为两台服务器声明相同的路由,根据需要在HTTP和HTTPS之间重定向:
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
的请求,并简单地将其重定向到处理它的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);
});
相关文章:
- jQuery-2.1.1.min.js或最新版本jQuery-2.13.min.js不会't支持'@
- jQuery检测浏览器是否支持Zoom
- 错误:对象没有't支持'自动完成'
- EmberJS中支持单字母单词模型
- javascript中的命名空间,IDE中支持代码完成/内容辅助's
- Internet Explorer缺少占位符支持,特别是密码字段
- 为什么我得到错误IE修剪方法是't支持
- 关于引入外部javascript文件的问题&css通过https
- jquery ajax https调用给出ERR_INSECURE_RESPONSE
- 任何浏览器都不支持javascript函数
- GTK百老汇支持同时连接
- JQuery示例不起作用-“;对象没有't支持属性或方法'按钮'&”;
- 对象不支持属性或方法“自动完成”
- 如何通过安全的https连接在javascript中使用基于soap xml的Web服务
- $https请求的安全性
- 对象没有'不支持set_viewXML
- Javascript Q库浏览器支持
- SpookyJS支持https网页吗
- 让restify REST API服务器同时支持HTTPS和HTTP
- Nodejs错误:协议"http:"不受支持的.预计“https:“