- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我按照本教程使用 multer-express 上传文件,然后通过 id Scoth.io 检索图像.
该设置使用 LokiJS 作为数据库。
所有 API 都工作正常,但是当按 ID 检索多个图像的 API 不适用于多个图像时。大多数获取请求在服务器上处于待处理状态(Chrome 开发工具的网络面板中的状态处于待处理状态)。
一旦处于挂起状态(永远挂起),请求就永远不会完成,并且服务器会陷入其中。
app.get('/images/:id', async (req, res) => {
try {
const col = await loadCollection(COLLECTION_NAME, db);
const result = col.get(req.params.id);
if (!result) {
res.sendStatus(404);
return;
};
res.setHeader('Content-Type', result.mimetype);
fs.createReadStream(path.join(UPLOAD_PATH, result.filename)).pipe(res);
} catch (err) {
res.sendStatus(400);
}
})
import * as express from 'express'
import * as multer from 'multer'
import * as cors from 'cors'
import * as fs from 'fs'
import * as path from 'path'
import * as Loki from 'lokijs'
import { loadCollection, imageFilter } from './utils'
//setup
const DB_NAME = 'db.json'
const COLLECTION_NAME = 'images'
const UPLOAD_PATH = 'uploads'
const upload = multer({ dest: `${UPLOAD_PATH}/`, fileFilter: imageFilter }) //MULTER CONFIG
const db = new Loki(`${UPLOAD_PATH}/${DB_NAME}`, { persistenceMethod: 'fs' })
// app
const app = express();
app.use(cors());
app.get('/', (req, res) => {
res.json({responseText : 'Server running successfully'})
})
//Upload Single
app.post('/fileUpload', upload.single('file'), async (req, res) => {
try {
const col = await loadCollection(COLLECTION_NAME, db)
const data = col.insert(req.file)
db.saveDatabase()
res.send({id: data.$loki, fileName: data.filename, originalName: data.originalname })
} catch (err) {
res.sendStatus(400)
}
})
//Upload Multiple
app.post('/photos/upload', upload.array('photos', 12), async (req, res) => {
try {
const col = await loadCollection(COLLECTION_NAME, db)
const data = [].concat(col.insert(req.files))
db.saveDatabase()
res.send(data.map(x => ({ id: x.$loki, fileName: x.filename, originalName: x.originalname })));
} catch (err) {
res.sendStatus(400)
}
})
//Retrieve Image
app.get('/images', async (req, res) => {
try {
const col = await loadCollection(COLLECTION_NAME, db)
res.send(col.data)
} catch(err) {
res.sendStatus(400)
}
})
// Retrieve Image by Id
app.get('/images/:id', async (req, res) => {
try {
const col = await loadCollection(COLLECTION_NAME, db)
const result = col.get(parseInt(req.params.id))
if(!result) {
res.sendStatus(404)
return;
}
res.setHeader('Content-Type', result.mimetype);
fs.createReadStream(path.join(UPLOAD_PATH, result.filename)).pipe(res)
} catch(err) {
res.sendStatus(400)
}
})
app.listen(3000, function () {
console.log('listening on port 3000!');
})
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Fetch Image (NodeJS-LokiJS API) - Example</title>
<style>
.photo {
width: 100px;
display: block;
margin-bottom: 5px;
border: 2px solid black;
}
</style>
</head>
<body>
<h1>HTML Example</h1>
<p>
JPEG:<br>
<img class="photo" src="http://localhost:3000/images/1">
<img class="photo" src="http://localhost:3000/images/2">
<img class="photo" src="http://localhost:3000/images/3">
<img class="photo" src="http://localhost:3000/images/4">
<img class="photo" src="http://localhost:3000/images/5">
<img class="photo" src="http://localhost:3000/images/6">
</p>
</body>
</html>
import * as del from 'del'
import * as Loki from 'lokijs'
const loadCollection = function (colName, db: Loki): Promise<Loki.Collection<any>> {
return new Promise(resolve => {
db.loadDatabase({}, _=> {
const _collection = db.getCollection(colName) || db.addCollection(colName)
resolve(_collection)
})
})
}
const imageFilter = function (req, file, cb) {
// accept image only
if (!file.originalname.match(/\.(jpg|jpeg|png|gif)$/)) {
return cb(new Error('Only image files are allowed!'), false);
}
cb(null, true);
}
export { imageFilter, loadCollection }
最佳答案
看起来 loadCollection
确实有问题。从 loadCollection
中删除 db.loadDatabase
并在初始化后仅在 index.ts 中加载数据库一次。
index.ts
import * as express from 'express'
import * as multer from 'multer'
import * as cors from 'cors'
import * as fs from 'fs'
import * as path from 'path'
import * as Loki from 'lokijs'
import { loadCollection, imageFilter } from './utils'
//setup
const DB_NAME = 'db.json'
const COLLECTION_NAME = 'images'
const UPLOAD_PATH = 'uploads'
const upload = multer({ dest: `${UPLOAD_PATH}/`, fileFilter: imageFilter }) //MULTER CONFIG
const db = new Loki(`${UPLOAD_PATH}/${DB_NAME}`, { persistenceMethod: 'fs' })
db.loadDatabase({});
// app
const app = express();
app.use(cors());
app.get('/', (req, res) => {
res.json({responseText : 'Server running successfully'})
})
//Upload Single
app.post('/fileUpload', upload.single('file'), async (req, res) => {
try {
const col = await loadCollection(COLLECTION_NAME, db)
const data = col.insert(req.file)
db.saveDatabase()
res.send({id: data.$loki, fileName: data.filename, originalName: data.originalname })
} catch (err) {
res.sendStatus(400)
}
})
//Upload Multiple
app.post('/photos/upload', upload.array('photos', 12), async (req, res) => {
try {
const col = await loadCollection(COLLECTION_NAME, db)
const data = [].concat(col.insert(req.files))
db.saveDatabase()
res.send(data.map(x => ({ id: x.$loki, fileName: x.filename, originalName: x.originalname })));
} catch (err) {
res.sendStatus(400)
}
})
//Retrieve Image
app.get('/images', async (req, res) => {
try {
const col = await loadCollection(COLLECTION_NAME, db)
res.send(col.data)
} catch(err) {
res.sendStatus(400)
}
})
// Retrieve Image by Id
app.get('/images/:id', async (req, res) => {
try {
const col = await loadCollection(COLLECTION_NAME, db)
const result = col.get(parseInt(req.params.id))
if(!result) {
res.sendStatus(404)
return;
}
res.setHeader('Content-Type', result.mimetype);
fs.createReadStream(path.join(UPLOAD_PATH, result.filename)).pipe(res)
} catch(err) {
res.sendStatus(400)
}
})
app.listen(3000, function () {
console.log('listening on port 3000!');
})
utils.ts
import * as del from 'del'
import * as Loki from 'lokijs'
const loadCollection = function (colName, db: Loki): Promise<Loki.Collection<any>> {
return new Promise(resolve => {
const _collection = db.getCollection(colName) || db.addCollection(colName)
resolve(_collection)
})
}
const imageFilter = function (req, file, cb) {
// accept image only
if (!file.originalname.match(/\.(jpg|jpeg|png|gif)$/)) {
return cb(new Error('Only image files are allowed!'), false);
}
cb(null, true);
}
export { imageFilter, loadCollection }
关于node.js - Node-LokiJS : not all get requests are fulfilled, 请求状态永远处于待处理状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58767541/
这是我的错误... Thread 1: EXC_BAD_ACCESS (code=1, address=0x18) 这是我的产品请求代表... class ProductRequestDelegate
谁能解释一下这些函数是什么意思? setDate = agent.parameters.date.split('T')[0]; setTime = agent.parameters.time.spli
我正在使用 Dialogflow 开发一个聊天机器人,想验证某人的年龄。简要介绍一下背景:我正在创建一个聊天机器人来识别护理需求,例如住宅或痴呆症护理。在最初的查询中,我希望能够通过在 Dialogf
我正在使用名为 IonSound.js 的声音播放器,可以在此处找到它。 http://ionden.com/a/plugins/ion.sound/en.html 根据文档,我可以像这样监听 sou
我想在我的履行代码中获取参数的原始输入。 我尝试过: var time = agent.parameters.time.original 但结果未定义。 我已经尝试过: var query = age
我设置了一个返回 Promise 的函数.我想在 PromiseKit 的 when(fulfilled:) 中使用这个函数功能,但每当我尝试这样做时,我都会收到错误消息。这是返回 Promise 的
我正在使用 dialogflow 和 google assistant 创建一个语音机器人。我的客户提供了他的网络访问权限,这不是私有(private) URL,而是 IP。它也没有通过 SSL 认证
我是 dialogflow 实现的新手,我正在尝试根据用户问题从新闻 API 中检索新闻。我遵循了新闻 API 提供的文档,但我无法从搜索结果中捕捉到任何响应,当我在控制台中运行该函数时,它不是错误。
我们偶尔会收到“CoreData 无法完成故障”的信息。我们已阅读 Apple 文档,但不清楚允许保留哪些内容。我们非常小心地为每个线程创建一个上下文等。但是,我们的应用程序正在做的一件事是我们在 U
我一直在尝试 DialogFlow 和 Fulfillment,但直到现在我总是将 FulfillmentText 从我的 webhook 返回到我的机器人,如下所示: response = {
async function pending() { return new Promise((resolve, reject) => { resolve(1) }); } async functi
我有一个联系人应用程序,我创建了一个行动项目,最终根据用户对话决定要调用的电话号码。要调用的号码正在 后端(使用 Webhook 实现) 决定。 我想开始调用后端确定的号码(就像你在 Google 智
我在很多测试中都使用了 XCTestExpectation,有时(非常随机地)一些期望没有实现(尽管我确信它们应该是)。 在调查这个问题时,我注意到一些期望在主线程中实现,而一些在后台线程中实现。到目
这是我正在使用的导致问题的代码行: [self.managedObjectContext deleteObject:object]; 然后当它保存上下文时,它会导致崩溃: Terminating ap
(相关但不完全相同:JS Promises: Fulfill vs Resolve) 我一直在努力思考 Javascript promises,我正在努力解决 resolve 和 resolved 与
use std::any::Any; pub enum ObjectType { Error, Function, } pub trait Object { fn obj_ty
美好的一天。需要一些新鲜的眼光。不确定为什么我的 Promise 在浏览器控制台中返回“pending”: // contact.js (react) /* trim */ submitForm =
我可以运行这段代码 fn testf(host: &str) {} fn start(host: &str) { testf(host); testf(host); } 但出于某种原因
我试图在 Rust 的线程中使用方法,但我收到以下错误消息 :21:10: 21:23 error: the type [closure@:21:24: 23:14 tx:std::sync::mps
对于应用程序的最近更新,我看到许多崩溃日志都包含核心数据无法完成故障的错误。但是在应用程序(启动或其他地方)中的任何地方,我都没有删除无法实现故障的对象,也不会级联删除它们。这个错误还能怎么发生?有没
我是一名优秀的程序员,十分优秀!