Это не идеально.Не следует создавать обычный 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 просто выбросит ENOENT.Также нет причин делать что-либо асинхронно, прежде чем вы даже войдете в цикл обработки событий.
Я не знаю, почему вы хотите, чтобы ваш сервер был условно 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;
Помните, что синхронно делать все хорошо, если вам не нужно одновременно обслуживать миллион запросов.