如何编写 GET api 调用函数以在 运行 实际 select by Id 语句之前将数据插入数据库?
How to write a GET api that calls a function to insert data into the db before running the actual select by Id statement?
我编写了一个 scanMetadata 函数,它接受在 url 中传递的 id,进行一些计算并将数据插入文件元数据 table。我正在创建的 api 是 get_metadata,它必须先 运行 这个函数,然后再 运行s Filemetadata.findById 选择 fileMetadata [=27 中的记录=] 基于id。我试过这样写,但它总是 return “从应用程序收到的响应不完整”。当 运行 单独工作时,这两个功能都很好。
exports.getMetadata = async (req, res, next) => {
await scanMetadata(req.params.fileId);
FileMetadata.findById(req.params.fileId, (err, data) => {
if (err) {
if (err.kind === "not_found") {
res.status(404).send({
message: `Not found file with id ${req.params.fileId}.`
});
} else {
res.status(500).send({
message: `Error retrieving file with id ${req.params.fileId}.`
});
}
} else res.send(data);
});
};
我的api路线是这样的
app.get('/get_metadata/:fileId', files.getMetadata);
扫描元数据功能
let scanMetadata = async function scanMetadata (fileId) {
let file = await get_files(fileId);
let serverFilePath = file.serverFilePath;
//TODO:Change hereto read serverFilePath after all record from table is apk
let reader = ApkReader.readFile("C:\Users\user\Source\Repos\ApkScanner\backend\app\files\Instagram_v1550037107_apkpurecom.apk");
let manifest = reader.readManifestSync();
let versionCode = manifest.versionCode;
let versionName = manifest.versionName;
let package = manifest.package;
let minSdk = manifest.usesSdk.minSdkVersion;
let targetSdk = manifest.usesSdk.targetSdkVersion;
let launcherActivityName = manifest.application.launcherActivities[0].name;
let icon = manifest.application.icon;
await insert_metadata(versionCode, versionName, package, fileId, minSdk, targetSdk,launcherActivityName, icon);
await update_files();
}
是serverFilePath的问题。我硬编码了本地文件的文件路径,而不是服务器中的绝对文件路径。
我编写了一个 scanMetadata 函数,它接受在 url 中传递的 id,进行一些计算并将数据插入文件元数据 table。我正在创建的 api 是 get_metadata,它必须先 运行 这个函数,然后再 运行s Filemetadata.findById 选择 fileMetadata [=27 中的记录=] 基于id。我试过这样写,但它总是 return “从应用程序收到的响应不完整”。当 运行 单独工作时,这两个功能都很好。
exports.getMetadata = async (req, res, next) => {
await scanMetadata(req.params.fileId);
FileMetadata.findById(req.params.fileId, (err, data) => {
if (err) {
if (err.kind === "not_found") {
res.status(404).send({
message: `Not found file with id ${req.params.fileId}.`
});
} else {
res.status(500).send({
message: `Error retrieving file with id ${req.params.fileId}.`
});
}
} else res.send(data);
});
};
我的api路线是这样的
app.get('/get_metadata/:fileId', files.getMetadata);
扫描元数据功能
let scanMetadata = async function scanMetadata (fileId) {
let file = await get_files(fileId);
let serverFilePath = file.serverFilePath;
//TODO:Change hereto read serverFilePath after all record from table is apk
let reader = ApkReader.readFile("C:\Users\user\Source\Repos\ApkScanner\backend\app\files\Instagram_v1550037107_apkpurecom.apk");
let manifest = reader.readManifestSync();
let versionCode = manifest.versionCode;
let versionName = manifest.versionName;
let package = manifest.package;
let minSdk = manifest.usesSdk.minSdkVersion;
let targetSdk = manifest.usesSdk.targetSdkVersion;
let launcherActivityName = manifest.application.launcherActivities[0].name;
let icon = manifest.application.icon;
await insert_metadata(versionCode, versionName, package, fileId, minSdk, targetSdk,launcherActivityName, icon);
await update_files();
}
是serverFilePath的问题。我硬编码了本地文件的文件路径,而不是服务器中的绝对文件路径。