Я запрашивая к API с помощью Restify Моей базы данных SQLite есть таблица мест, которая имеет следующую структуру (id INTEGER, name TEXT, image BLOB)
Я пытаюсь вывести результат ответа, как изображение (блобо содержит jpeg-изображение), но до сих пор мне не удалось. В браузере после запроса я получаю The image 'http://localhost:8080/place/1 cannot be displayed because it contains errors
Я получаю должным образом в консоли название места.узел возврат изображений хранятся в SQLite сгустка
Вот мой код:
var restify = require('restify');
function respond(req, res, next) {
var fs = require("fs");
var file = "./data.db";
var exists = fs.existsSync(file);
var sqlite3 = require('sqlite3').verbose();
var db = new sqlite3.Database(file);
db.get("SELECT id, name, image FROM places WHERE id = ?", req.params.uid, function(err, row){
console.log(row.name);
res.header('Content-Type', 'image/jpeg');
res.end(row.image);
db.close();
});
next();
}
var server = restify.createServer();
server.get('/place/:uid', respond);
server.listen(8080, function() {
console.log('%s listening at %s', server.name, server.url);
});
UPDATE: Изображение возвращается без проблем, когда я создать блоб, используя ту же самую node-sqlite3 библиотеку. Если я создаю капли, используя Ruby или Go (те, которые я тестировал), декодирование node-sqlite3
не работает должным образом.
Что здесь происходит? Любая помощь оценивается.
Вы закрываете базу данных 'db.close' перед запуском запроса, так как запрос выполняется асинхронно. Переместите 'db.close' в конец обратного вызова' db.get'. –
@ColonelThirtyTwo Done, по-прежнему та же проблема, я обновляю код с вашим предложением. –