首页 > 解决方案 > Express JS - 从 REST 调用加载数据并在应用程序启动时设置为应用程序变量

问题描述

我有一个从 REST API 加载一些 JSON 数据的中间件。

loadDataStartup.js

'use strict';

const db_contants = require('./db_contants');

async function loadData () {
    console.log("*** loadData() called");
    var equipmentCategoryArr = await db_contants.getEquipmentCategory();
    return equipmentCategoryArr;
}

module.exports = {loadData};

在我的 app.js 中,我需要通过 app.set 将数据设置为应用程序级变量,以便以后其他路由器可以使用它。

应用程序.js

const { loadData } = require('./db/loadDataStartup');
var app = express();
app.set('dataOnStartup', async loadData());

当我运行npm start时,它抛出了以下错误:

app.set('dataOnStartup', async loadData());
                         ^^^^^

SyntaxError: missing ) after argument list

我使用的是 node.js 版本 8.11.3。

标签: node.jsexpress

解决方案


首先,你不做async callAsyncFn(),但是await callAsyncFn()async loadData()语法错误也是如此。您可能想要做的是await loadData(). 但是你也不能在入门级的应用程序文件中这样做,因为这个语句不在async函数中(你只能awaitasync函数内部)。

解决方法是使用asyncIIFE(立即调用函数表达式),如下所示:

const { loadData } = require("./db/loadDataStartup");
var app = express();

(async function() {
    app.set("dataOnStartup", await loadData());
    // The rest of your app startup logic
})();

推荐阅读