nodejs:
app.get('/slider',(req, res)=>{
fs.readFile('logo.png', 'binary', function(err, dataStr) {
if(err) {
//如果读取文件失败,则err的值为错误对象,dataStr的值为 undefined
return console.log('读取文件失败!' + err.message);
} else {
//如果读取文件成功 则err的值为null
console.log('读取文件成功!' + dataStr);
res.send(dataStr)
}
})
})
前端vue:
<img :src="myimg" alt="">
...
getSlider(){
axios .get('test/slider',{responseType: 'blob'}).then( //可以不写
response => {
console.log('slider请求成功了', response.data);
let blob = new Blob([response.data], {type: "image/png"}); // 返回的文件流数据
console.log(blob)
let url = window.URL.createObjectURL(blob); // 将他转化为路径
this.myimg = url
},
error => {console.log('请求失败!', error.message);}
)
}
img-src下放入blob:http://...格式图片,界面不显示?
控制台中能显示blob路径已经在src中了,但是界面就是不显示。。
后端数据库采用mongodb,mongodb是非关系型数据库,存储集合。
1、首先下载moongose插件可以很方便的从mongodb中获取数据
在node搭建的服务端Server新建文件\model\goods
var mongoose = require('mongoose');
//moongose可以简捷的从mongoDB中获取数据
//moongose有一个模式Schema,用于定义从mongodb中查询的每一个条目
var Schema = mongoose.Schema;
//数据对象的模板
var productSchema = new Schema({
"productId":String,
"productName":String,
"salePrice":Number,
"productImage":String
});
//输出数据对象
module.exports = mongoose.model('Goods',productSchema);
使用moogose中的模式Schema定义查询模型并输出。
2、nodeJS端查询数据并返回结果\routes\goods
先导入相关模块,用到了express框架和moogose,model
var express = require('express');
var router = express.Router();
var mongoose = require('mongoose');
var Goods = require('../models/goods');
连接数据库
mongoose.connect('mongodb://127.0.0.1:27017/数据库名称');
mongoose.connection.on("connected",function () {
console.log("MongoDB connected success");
});
mongoose.connection.on("error",function () {
console.log("MongoDB connected fail");
});
mongoose.connection.on("disconnected",function () {
console.log("MongoDB connected disconnected");
});
查询数据
使用Express.Router(),对前端的get请求进行响应,并把结果放在result.list中,与status,msg一起以json形式返回给客户端
router.get("/",function (req,res,next) {
//用Goods模板调用moogoseAPI进行数据库查询
Goods.find({},function (err,doc) {
if(err){
res.json({
status:'1',
msg:err.message
});
}else{
res.json({
status:'0',
msg:'',
result:{
count:doc.length,
//查询结果
list:doc
}
})
}
})
});
3、客户端接收数据
跨域代理
nodejs执行的数据在localhost:3000,vue运行在8080,需要在config/index.js的dev下添加转发代理
proxyTable: {
'/goods':{
target:'http://localhost:3000'
}
每当vue利用axios访问/goods时时,就将地址转到3000
4、vue进行数据请求并渲染到界面
在mounted挂载一个getGoodsList()的方法,载入后调用这个方法。通过axios的/goods发送请求,刚刚编辑跨域代理,通过/goods可以请求到nodejs。data中存储返回的实际内容,status状态码为0时,表示成功,数据在result.llist中,对list进行遍历就可以将数据渲染到界面
mounted:function (){
this.getGoodsList();
},
methods:{
getGoodsList(){
axios.get("/goods").then(response =>{
let res=response.data;
if(res.status==0){
this.goodsList=res.result.list;
}else{
console.log("从服务器请求数据失败!");
}
})
},
v-for进行循环,图片利用插件用到了懒加载v-lazy
<ul>
<li v-for = "(item,index) in goodsList">
<div class="pic">
<a href="#"><img v-lazy="'/static/'+item.productImage" alt=""></a>
</div>
<div class="main">
<div class="name">{{ item.productName}}</div>
<div class="price">{{ item.salePrice}}</div>
<div class="btn-area">
<a href="javascript:;" class="btn btn--m">加入购物车</a>
</div>
</div>
</li>
</ul>
回答:
为了将图片解析为二进制数据并传递给前端Vue接收,可以使用nodejs中的fs模块和base64编码进行处理。以下为具体的解决方案:
1.使用fs模块读取图片文件并转换为base64编码:
const fs = require('fs');
// 读取图片文件并将其转换为base64编码
const imageData = fs.readFileSync('/path/to/image.png', { encoding: 'base64' });
2.将base64编码的图片数据通过接口传递给前端Vue:
使用Express框架搭建服务器,定义一个返回base64编码图片数据的接口,然后将得到的图片数据作为接口返回值传递给前端Vue。
const express = require('express');
const app = express();
// 定义一个返回base64编码图片数据的接口
app.get('/getImageData', (req, res) => {
const imageData = fs.readFileSync('/path/to/image.png', { encoding: 'base64' });
res.send(imageData);
});
// 启动服务器
app.listen(3000, () => console.log('Server running on port 3000'));
3.在前端Vue中接收图片数据并渲染:
前端Vue通过访问上述接口获取到图片数据,然后将其显示在页面上,可以使用<img>
标签并将base64编码数据作为src
属性传递给它来实现。
<template>
<div>
<!-- 显示图片 -->
<img :src="imageData" alt="图像">
</div>
</template>
<script>
export default {
data() {
return {
imageData: ''
};
},
created() {
// 获取图片数据
this.getImageData();
},
methods: {
getImageData() {
// 发送GET请求获取图片数据
axios.get('/getImageData').then(response => {
this.imageData = 'data:image/png;base64,' + response.data;
}).catch(error => {
console.log(error);
});
}
}
}
</script>
上述代码中,axios
是一个常用的前端HTTP请求库,用于向服务器发送GET请求,获取base64编码图片数据,并将其赋值给imageData
变量,接着将imageData
显示在页面上。注意需要在data中定义imageData
变量,并在mounted或created钩子函数中调用getImageData
方法来获取图片数据。