Express JS-从REST调用加载数据,并在应用程序启动时设置为应用程序变量

时间:2018-10-15 03:10:01

标签: node.js express

我有一个中间件,可以从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将数据设置为应用程序级变量,以便以后可以被其他路由器使用。

app.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。

1 个答案:

答案 0 :(得分:0)

首先,您没有执行async callAsyncFn(),而是执行await callAsyncFn()。因此async loadData()是语法错误。您可能想做的是await loadData()。但是,您也不能在入门级应用程序文件中执行此操作,因为该语句不在async函数中(您只能在await函数中使用async)。

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

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

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