Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在express.js应用程序启动之前加载异步数据库url并启动数据库连接?_Javascript_Node.js_Mongodb_Express_Mongoose - Fatal编程技术网

Javascript 如何在express.js应用程序启动之前加载异步数据库url并启动数据库连接?

Javascript 如何在express.js应用程序启动之前加载异步数据库url并启动数据库连接?,javascript,node.js,mongodb,express,mongoose,Javascript,Node.js,Mongodb,Express,Mongoose,我已将express.js应用程序配置为在AWS lambda上运行。数据库URL在AmazonKMS服务中存储并加密,因此如果我想使用该URL,则必须使用AWS KMS服务解密密钥 // imports import mongoose from 'mongoose'; import serverless from 'serverless-http'; // KMS promise const getKmsKey = (key) => { // implementation r

我已将express.js应用程序配置为在AWS lambda上运行。数据库URL在AmazonKMS服务中存储并加密,因此如果我想使用该URL,则必须使用AWS KMS服务解密密钥

// imports
import mongoose from 'mongoose';
import serverless from 'serverless-http';

// KMS promise
const getKmsKey = (key) => { 
  // implementation
  return new Promoise((resolve, reject) => { /* KMS logic */ });
};

// initiate database connection
(async function(){
    mongoose.connect(await getKmsKey('MONGOURL'));
    mongoose.Promise = global.Promise;
})();

const app = express();

// EDIT: added missing app.get example
app.get('/status', async (req, res, next) => {
  // I would like to make sure that mongoose is always initiated here
  res.sendStatus(200);
});

module.exports.handler = serverless(app.default);
确保在任何快速路线之前建立数据库连接的最佳策略是什么?我看到存在sync library(),但我认为仅仅用于设置数据库连接的开销太大,我不想在其他任何地方使用它

编辑:
app.get('/status',async(req,res,next)=>{
在原始帖子中丢失了。

Just
wait-mongoose.connect(wait-getKmsKey('MONGOURL');
Just
wait-mongoose.connect(wait-getKmsKey('MONGOURL'));
您也可以使用promise

mongoose.connect(uri, options).then(
  () => { 
    /** ready to use. The `mongoose.connect()` promise resolves to undefined. */
    },
  err => {
    /** handle initial connection error */
    }
);

请参阅以获取参考,您也可以使用promise

mongoose.connect(uri, options).then(
  () => { 
    /** ready to use. The `mongoose.connect()` promise resolves to undefined. */
    },
  err => {
    /** handle initial connection error */
    }
);

请参阅参考

我在搜索相同的内容,并找到了这篇伟大的文章,解释了如何做到这一点

您可以将所有路线放在单独的模块中,并:

app.on('ready', function() { 
    app.use('/', require('./routes'));
    app.listen(3000, function(){ 
        console.log("app is ready"); 
    }); 
});

我也在寻找同样的东西,发现了这篇很好的文章,解释了你是如何做到的

您可以将所有路线放在单独的模块中,并:

app.on('ready', function() { 
    app.use('/', require('./routes'));
    app.listen(3000, function(){ 
        console.log("app is ready"); 
    }); 
});