node.js - 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。
解决方案
首先,你不做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
})();
推荐阅读
- scala - 面临扩大akka-http服务器的问题
- node.js - 如何使用nodejs在同一文件中调用不同的函数
- asp.net-mvc - 带有 Angular 5 项目的 ASp.NET MVC - 添加没有 angular-CLI.json 文件的环境配置
- java - java.lang.NumberFormatException:空字符串无法启动活动组件信息
- spring-boot - 杰克逊如何在过渡之外序列化对象
- python - 如何查看动态库文件(.dylib)的函数定义?
- android - RecyclerView.OnItemTouchListener 不定期调用 OnItemClick 和 onLongItemClick
- git - 根据文件夹设置 git 凭据
- python - ValueError:信号仅在连接到 BIG IP 设备时在主线程错误中起作用
- ios - 如何在iOS中滑动离子滑动时禁用垂直滚动?