这篇有点问题等我再写写看别用!!这篇返回的是绝对路径浏览器用不了!!
nodjs写后端接口返回片
其实这个跟之前那篇差不多,我采用的是数据库存片相对路径,接口返回片的绝对路径(用的__dirnam
文件结构
tools/pathProcessinjs(路径处理函数)
因为写的是前后端分离,如果直接返回相对路径前端拿到相对路径就去前端的文件夹那里去找了,实际根本没有。所以目前的想法是利用__dirname返回绝对路径。
因为片存在了public/img/swiper,在路由上几层的文件夹所以要用要对路径进行处理。
// 处理绝对路径的路径处理函数
// dirname=>__dirname(目前的绝对地址) num往上走几层
function pathProcessing(dirname,num){
let localString=dirname
let locationArr=localString.split('').slice(0,-num).join('')
return locationArr;
}
module.exports =pathProcessing ;
// pathProcessing(__dirname,1)
router/img/swiper.js
返回的是一组片的绝对路径
const { pool, router } = require('../../connect');
// 导入路径处理函数
const pathProcessing = require('../../tools/pathProcessing');
var path = require('path');
// 返回的数据库数据
// 要改成自己的数据
function Result({ img_id = '', img_name = '', location = ' ', img_type = '' }) {
// console.log(a)
this.img_id = img_id;
this.img_name = img_name;
this.location = location;
this.img_type = img_type;
}
router.get('/img/swiper', (req, res) => {
pool.getConnection((err, conn) => {
//这个sql语句要改成自己的用的
conn.query('SELECT * FROM mall.swiper;', (e, results) => {
if (e) throw error;
var dataString = JSON.stringify(results);
var data = JSON.parse(dataString);
imgLocation_arr = new Array();
let img;
for (let index in data) {
img=new Result(data[index])
let imgObj={}
imgObj.img_id=img.img_id
let imgLocation=img.location+img.img_name+img.img_type
//这里可以使用replaceAll 我的node.js好像版本不够 就不支持 我也懒得更新了 有兴趣的可以试试看
imgLocation=(pathProcessing(__dirname, 2).toString() +imgLocation).replace(//g, '/');
imgObj.imgLocation=imgLocation;
imgLocation_arr .push(imgObj)
}
res.json(imgLocation_arr )
});
pool.releaseConnection(conn); // 释放连接池,等待别的连接使用
});
});
module.exports = router;
顺带一提,可以直接用res.sendFile(相对此文件的相对路径,{root:__dirname}来返回片能用成功了,但是这样写好像只能返回一张,我没能返回一组。找个时间试试看返回一组。
文章为作者独立观点,不代表股票交易接口观点