You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
plantwork/server.js

83 lines
2.9 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

const fetch = require('node-fetch');
const express = require('express');
const app = express();
// 跨域配置(确保前端正常调用)
app.use((req, res, next) => {
res.setHeader('Access-Control-Allow-Origin', '*');
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS');
res.setHeader('Access-Control-Allow-Headers', 'Content-Type');
if (req.method === 'OPTIONS') return res.sendStatus(200);
next();
});
// 支持大图片上传
app.use(express.json({ limit: '10mb' }));
app.use(express.urlencoded({ extended: true, limit: '10mb' }));
// 你的有效密钥(不变)
const BAIDU_API_KEY = "U3RlIPY6NeNvHkivaGQaT9RV";
const BAIDU_SECRET_KEY = "fsOAjmvYyjD4Mtm1eRDhRd5VqP4aqZPC";
const TONGYI_API_KEY = "sk-48bcbd07980c4c8db89129118fedd89f";
// 1. 获取百度Token
app.get('/baidu/token', async (req, res) => {
const tokenUrl = `https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=${BAIDU_API_KEY}&client_secret=${BAIDU_SECRET_KEY}`;
try {
const response = await fetch(tokenUrl);
const data = await response.json();
res.json(data);
} catch (err) {
console.error('获取百度Token失败', err);
res.status(500).json({ error: '获取Token失败' });
}
});
// 2. 植物识别接口
app.post('/baidu/plant', async (req, res) => {
const { access_token, image } = req.body;
const pureBase64 = image.replace(/^data:image\/\w+;base64,/, '');
const plantUrl = `https://aip.baidubce.com/rest/2.0/image-classify/v1/plant?access_token=${access_token}`;
try {
const response = await fetch(plantUrl, {
method: 'POST',
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
body: `image=${encodeURIComponent(pureBase64)}&top_num=1`
});
const data = await response.json();
res.json(data);
} catch (err) {
console.error('植物识别失败:', err);
res.status(500).json({ error: '识别出错' });
}
});
// 3. 养护建议接口(稳定版)
app.post('/get-advice', async (req, res) => {
const { plantName } = req.body;
try {
const adviceResponse = await fetch("https://dashscope.aliyuncs.com/api/v1/services/aigc/text-generation/generation", {
method: "POST",
headers: {
"Content-Type": "application/json",
"Authorization": `Bearer ${TONGYI_API_KEY}`
},
body: JSON.stringify({
model: "qwen-turbo",
input: {
prompt: `请给出${plantName}的3条养护建议每条100字以内1.光照温度2.浇水施肥3.常见问题。口语化。`
}
})
});
const adviceData = await adviceResponse.json();
res.json(adviceData);
} catch (error) {
console.error("生成建议失败:", error);
res.status(500).json({ error: "生成建议失败" });
}
});
// 启动服务端口3000
app.listen(3000, () => {
console.log('后端启动http://localhost:3000');
});