0
点赞
收藏
分享

微信扫一扫

【开源免费】基于SpringBoot+Vue.JS房产销售系统(JAVA毕业设计)

witmy 2024-09-13 阅读 24

1 前端 Vue 发送请求

在 Vue 下使用 百度翻译 API

首先在 百度翻译开放平台 (baidu.com) 查看开发文档

这里使用 GET 方法发送请求:

需要用到的包:

        MD5加密 -> md5 库

        发送异步请求 -> axios

在 head 标签引入:

两个文本域负责翻译,分别双向绑定了 data

vue实例:

const app = new Vue({
el: '#app',
data: {
translate_text: '',
translated_text: ''
},
watch: {
translate_text(newVal) {
const salt = '123';
const sign = md5(appid + newVal + salt + key);
axios({
method: 'get',
// url: 'https://fanyi-api.baidu.com/api/trans/vip/translate',
url: 'http://localhost:4000/translate',
params: {
q: this.translate_text,
from: 'auto',
to: 'zh',
appid: appid,
salt: '123',
sign: sign
}
})
.then((response) => {
this.translated_text = response.data.trans_result[0].dst;
})
}
}
})

        在<script>还声明两个常量,分别是官方规定的 id 和密钥

        按照官方接口文档,需要对字符串进行拼接,然后 MD5 加密,这里的随机数 salt,可以通过Math.random() 生成

        最后 then(),拿到的 response 取data,然后根据文档

        最终的翻译结果其实是 trans_result,这是一个 数组

        需要取 [0],拿到第一个 json对象,然后在这个json对象里面取 dst,即:

        trans_result[0].dst

        通过 watch 监视要翻译的文本 translate_text,当 translate_text 改变时,通过 axios 发送请求,这里注意,如果 url 写为官方的 API 地址,就会出现 CORS 问题

报错:

Access to XMLHttpRequest at 'https://fanyi-api.baidu.com/api/trans/vip/translate?q=&from=auto&to=zh&appid=20230911001813160&salt=123&sign=a0f6fb7bd48354a4e1dadb12cfb7f2af' from origin 'http://127.0.0.1:5500' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

这是由于 本机 与 目标服务器 之间存在 跨域,这样是拿不到翻译结果的


2 后端 Node.js 代理

在当前 vue 工程下,新建文件夹 proxy ,进入文件夹,终端输入

npm init -y

初始化一个 Node.js 项目

安装相应的包

npm install express axios md5

新建一个 server.js 文件

const express = require('express');  
const axios = require('axios');
const md5 = require('md5'); // MD5 加密
const cors = require('cors'); // 引入 cors 中间件

const app = express(); // 创建一个 express 应用实例
const port = 4000;

// 使用 cors 中间件允许所有来源的跨域请求
app.use(cors());

app.get('/translate', (req, res) => { // req 请求对象,res 响应对象
const { q, from, to } = req.query; // 解构赋值,从查询参数 ?q='apple''auto''zh' 获取响应的值,并赋值
const appid = '20230911001813160';
const key = 'ehE0iLOaoIOeW1K8jxQ3';
const salt = Math.random().toString(36).substr(2, 8);
const sign = md5(appid + q + salt + key);

axios.get('https://fanyi-api.baidu.com/api/trans/vip/translate', {
params: {
q,
from,
to,
appid,
salt,
sign
}
})
.then(response => {
res.json(response.data);
})
.catch(error => {
console.error('翻译请求失败:', error);
res.status(500).send('翻译失败');
});
});

// Express 中用于启动服务器的方法
// 监听指定的端口号,并启动服务器以处理来自该端口的请求
app.listen(port, () => {
console.log('代理服务器运行在 http://localhost:${port}');
});

启动服务器:

node server.js

此时,在前端 axios 发送请求的 url,只需要填写代理服务器,然后通过代理服务器转发

url: 'http://localhost:4000/translate',

举报

相关推荐

0 条评论