Variable HTTP/HTTPS Express Server
Variable HTTP/HTTPS Express Server
我确信这只是一个简单的Javascript作用域问题(去图),但我已经尝试了几种不同的方法,似乎不能得到这个工作。
这个想法是Express.js服务器在调用express.createServer()时默认使用HTTP,但在检测到./conf/cert时可选择切换到HTTPS。Pem 和./conf/key.pem。我使用异步调用Node的path.exists(),其中第二个回调参数包含布尔值结果。我目前有它们嵌套,这样HTTPS服务器不会创建,直到它是"安全的"(我们知道两个文件是否存在的结果),因为没有排序保证否则。然而,正如我提到的,我已经尝试了几种不同的方法,但我似乎无法修改外部app变量。
我肯定有一个简单的修复,我现在没有看到,但任何帮助将是感激的!
app = module.exports = express.createServer();
path.exists('./conf/key.pem', function(exists){
var keyExists = exists;
path.exists('./conf/cert.pem', function(exists) {
var certExists = exists;
if (keyExists && certExists) {
app = express.createServer({
key: fs.readFileSync('./conf/key.pem'),
cert: fs.readFileSync('./conf/cert.pem')
});
}
});
});
这并不理想。您不应该创建一个普通的http服务器,只是为了让它被https服务器覆盖。我认为你提到的问题来自于你在下面设置了app
变量,而不是module.exports
。所以module.exports
仍然是指创建的原服务器。你应该这样做:
var app = express.createServer({
key: fs.readFileSync('./conf/key.pem'),
cert: fs.readFileSync('./conf/cert.pem')
});
module.exports = app;
没有理由先检查文件是否存在。如果文件不存在,readFileSync将抛出一个enent。在进入事件循环之前,也没有理由异步执行任何操作。
我不知道为什么你想让你的服务器有条件地使用https,但是要做一些类似于你在那里尝试做的事情:
var app;
try {
app = express.createServer({
key: fs.readFileSync('./conf/key.pem'),
cert: fs.readFileSync('./conf/cert.pem')
});
} catch(e) {
if (e.code !== 'ENOENT') throw e;
app = express.createServer();
}
module.exports = app;
或者,这样看起来更好:
var app;
if (path.existsSync('./conf/key.pem')) {
app = express.createServer({
key: fs.readFileSync('./conf/key.pem'),
cert: fs.readFileSync('./conf/cert.pem')
});
} else {
app = express.createServer();
}
module.exports = app;
请记住,只要你不需要同时处理一百万个请求,同步处理是可以的。
相关文章:
- 使用Express捕获参数
- 从模块内部访问Express装载路径
- 在Nodejs中Express输入DEBUG=app时权限被拒绝/bin
- 如何使用Node/Express显示有关特定错误的自定义html页面
- 发送json对象或使用express路由呈现视图
- renderReact/Rect Router+Node/Express.js的服务器端/同构渲染中未定义renderP
- 为什么不't Express呈现我的React应用程序
- Express服务器中语言子域的最佳实践
- 为什么不是'我的函数在解析云代码中工作吗?当我在Angular和Express中测试时,它是有效的
- 在带有Parse Server的express应用程序中使用Parse Javascript SDK
- 如何通过Postman将JSON发送到NodeJS Express Server
- 当需要(“http”)时发生了什么.Server() 以 Express 应用程序作为其参数进行评估
- Node Express Server request.on('end') 只为 Get 触发
- Express Server似乎给出了200,然后在发布请求时给出了404
- 运行Grunt Express Server导致错误:enent: no such file or directory,
- 使用Express从NodeJS Server下载文件
- Variable HTTP/HTTPS Express Server
- 麻烦连接到SQL Server Express与Node.js
- 用express server打开新的html页面
- 从Angular应用到Express Web Server的文件提交