从Node.js请求在React中获取图像

时间:2018-07-23 07:28:16

标签: node.js reactjs image superagent sendfile

必要时,React使用Superagent询问图像:

exports.getImgFromSection=function(id,request){
    request
       .get('/img/'+id)
       .end((error, response) => {
           if (!error && response) {
               console.log(response.file);
           } 
           else {
               console.log('There was an error fetching server', error);
           }
       })

}

Node.js这样回答:

app.get("/img/:id",function(req, res){ 
   // check if exists and then
        res.sendFile(path.join(__dirname, './data/img/'+req.params['id']+'.png'));
});

但是我不知道如何在React中获得图像。

console.log(response.file)未定义。

console.log(response.files[0])未定义。

console.log(response.body)为空。

console.log(response)给了我:

console.log(response)

如何在var中获取图像?谢谢。

解决方案:

在node.js中:

var img = fs.readFile('./data/imagesUploaded/image.png', function (err, data) {
        var contentType = 'image/png';
        var base64 = Buffer.from(data).toString('base64');
        base64='data:image/png;base64,'+base64;
        res.send(base64);
    }); 

反应:

request
       .get('/img/'+imgID)
       .end((error, response) => {
        if (!error && response) {
            this.setState({img1:response.text})
        } else {
            console.log('There was an error fetching server', error);
        }
       })

3 个答案:

答案 0 :(得分:0)

使用Axios包在React中获取POST请求。 https://github.com/axios/axios

https://github.com/axios/axios

您需要发送请求以获取图像或发布图像。 只是一个例子。

这是React中的一个函数。

 async sendEmail(name,interest,email,phone,message){


          const form = await axios.post('/api/form',{
            name,
            interest,
            email,
            phone,
            message
        })

    }

这会将请求发送到此处的Nodejs:

app.post('/api/form',(req,res)=>{

        console.log(req.body);
        console.log(123);
        const output = `
    <p> You have a  Request</p>
        <h3> Contact Details </h3>
        <ul>
            <li> Name : ${req.body.name}</li>
            <li> Interest : ${req.body.interest}</li>
            <li> Email : ${req.body.email}</li>
            <li> Email : ${req.body.phone}</li>
            <li> Email : ${req.body.message}</li>
        </ul>
    `;

这也是获取请求的方式,但是获取部分将在React代码中。

无论如何,请阅读Axios文档。将会有各种各样的例子。

答案 1 :(得分:0)

我正在使用axios(但是会很相似),这就是我获取图像的方式。

  const res = await axios.get(`/image/${imageId}`, {
    responseType: 'arraybuffer'
  });
  const imgFile = new Blob([res.data]);
  const imgUrl = URL.createObjectURL(imgFile);

我认为响应类型在这里很重要.....但是我有节点将其作为流发送(因为我正在从mongo中检索……)

答案 2 :(得分:0)

解决方案:

在node.js中:

var img = fs.readFile('./data/imagesUploaded/image.png', function (err, data) {
        var contentType = 'image/png';
        var base64 = Buffer.from(data).toString('base64');
        base64='data:image/png;base64,'+base64;
        res.send(base64);
    }); 

反应:

request
       .get('/img/'+imgID)
       .end((error, response) => {
        if (!error && response) {
            this.setState({img1:response.text})
        } else {
            console.log('There was an error fetching server', error);
        }
       })