图片来自 MySql,Nodejs 进入缓冲区数组

Image from MySql with Nodejs coming in buffer array

请帮我解决以下问题。

我已经在我的数据库中将一些图像保存在类型为 blod 的列中(图像为 .png)。现在我想提出一个请求(我正在使用 POSTMAN 程序进行测试)但我进入了 Json 一种类型的缓冲区数组,里面有一些数字。

我怎样才能让图片随处显示?

app.get('/getCountries', (req, res) => {

  const queryString = "SELECT name,flag_png,info FROM countries"

  getConnection().query(queryString, (err, results, fields) => { <br/>
    if(err){<br/>
      console.log('Failed to get request' + err);<br/>
      res.sendStatus(500);<br/>
    }else{<br/>
      console.log('The get request succesfully');<br/>
      res.json(results);<br/>
      //res.end()<br/>
    }<br/>
  })<br/>
})<br/>

我现在也在想,将图像保存在数据库中可能不是一个好主意,最好将其保存在服务器中。您对此有何看法?

除非图像数量相对较少,否则不建议将图像存储在数据库中(因为数据库性能会随着行大小和行数的增加而下降)。如果您有大量图像,最好存储在您的文件系统上并公开一个 API 供网页访问图像,您可以从中检索图像的 URL 列表你的数据库。

包括

const http = require('http');
const express = require('express');
const path = require('path');
const logger = require('morgan');
const app = express();
const mysql = require('mysql');
const url = require('url');
const fs = require('fs');
const path = require('path');
const localPool = mysql.createPool({
    host: 'some_host',
    user: 'some_user',
    password: 'some_password',
    database: 'some_database'
});
app.use(logger('dev'));
app.use(cors());
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
app.use(express.static(path.join(__dirname, 'public')));

通过存储在数据库中的图像 ID 获取图像的代码

// to get image ID's
app.get('/getCountries', (req, res) => {
    // return multiple results
    const queryString = 'SELECT name,flag,info FROM countries WHERE some_expression';
    localPool.query(queryString, (err, results) => {
        if(err) {
            res.status(500).end();
          } else if (results.length === 0) {
            res.status(404).end();
          } else {
              // note here I have a field called flag which contains and "ID" for the image.
            res.json(results);
          }
    });
});
// to get the image by the ID 
app.get('/getImage', (req, res) => {
    // get image id from url like: /getImage?id=91238129537
    const id = (url.parse(req.url, true).query).id;
    fs.readFile(path.resolve(`someDirectory/${id}`), { flag: 'r' }, (err, data) => {
        if (err) {
            res.status(404).end();
        } else {
            res.set('Content-Type', 'image');
            res.end(data, 'binary');
        }
    });
});

编码为 return 来自您数据库的图像

app.get('/getCountries', (req, res) => {
     // use LIMIT or WHERE to avoid a large set of results
    const queryString = "SELECT name,flag_png,info FROM countries WHERE some_expression LIMIT 1";
    localPool.query(queryString, (err, results) => {
      if(err) {
        res.status(500).end();
      } else if (results.length === 0) {
        res.status(404).end();
      } else {
        res.set('Content-Type', 'image/png');
        res.end(results[0].flag_png, 'binary');
      }
    })
});
const server = http.createServer(app).listen(3000);