新功能: - 创建AI聊天助手组件(AIChatWidget) - 支持文字+图片多模态对话 - 集成Gemini AI API - 支持图片编辑和内容生成 - 实时对话历史管理 - 优雅的UI设计,支持黑夜模式 技术实现: - 后端API代理Gemini API(/api/ai-chat) - 支持最多5张图片上传 - 流式响应处理 - 对话历史管理 - Base64图片处理 配置: - 在.env中添加Gemini API配置 - GEMINI_API_KEY - GEMINI_API_BASE_URL - GEMINI_MODEL 替换原弹幕功能,提供更强大的AI助手体验!
126 lines
3.7 KiB
JavaScript
Executable File
126 lines
3.7 KiB
JavaScript
Executable File
const express = require('express');
|
||
const cors = require('cors');
|
||
const { connectDB } = require('./db/mongoose');
|
||
const mongoose = require('mongoose');
|
||
const path = require('path');
|
||
const morgan = require('morgan');
|
||
const session = require('express-session');
|
||
const MongoStore = require('connect-mongo')(session);
|
||
|
||
// 创建Express应用
|
||
const app = express();
|
||
|
||
// 配置中间件
|
||
app.use(express.json());
|
||
app.use(express.urlencoded({ extended: true }));
|
||
app.use(cors());
|
||
|
||
// 配置会话
|
||
app.configure(express.session({
|
||
secret: 'your-secret-key',
|
||
resave: false,
|
||
saveUninitialized: true,
|
||
store: new MongoStore({
|
||
mongooseConnection: mongoose.connection,
|
||
ttl: 24 * 60 * 60 // 1 day
|
||
})
|
||
}));
|
||
|
||
// 配置视图引擎
|
||
app.set('views', path.join(__dirname, 'views'));
|
||
app.set('view engine', 'pug');
|
||
|
||
// 在开发环境中,启用热重载
|
||
if (app.get('env') === 'development') {
|
||
console.log('开发模式启动,启用热重载...');
|
||
app.use(require('connect-livereload')());
|
||
}
|
||
|
||
// 配置请求日志记录器
|
||
app.use(morgan('dev'));
|
||
|
||
// 添加健康检查路由
|
||
app.get('/api/health', (req, res) => {
|
||
res.json({ status: 'ok', timestamp: new Date().toISOString() });
|
||
});
|
||
|
||
// 错误处理中间件
|
||
app.use((err, req, res, next) => {
|
||
console.error('服务器错误:', err);
|
||
res.status(500).json({
|
||
success: false,
|
||
message: '服务器内部错误',
|
||
error: process.env.NODE_ENV === 'development' ? err.message : undefined
|
||
});
|
||
});
|
||
|
||
// 检查PHP是否可用
|
||
const volcPhpBridge = require('./bridge/volc-php-bridge');
|
||
|
||
// 启动时检查PHP环境
|
||
(async function() {
|
||
try {
|
||
const phpAvailable = await volcPhpBridge.checkPhpAvailability();
|
||
if (phpAvailable) {
|
||
console.log('✅ PHP环境检测通过,PHP桥接器可用');
|
||
} else {
|
||
console.error('⚠️ PHP环境不可用,火山引擎图像编辑功能可能无法正常工作');
|
||
console.error('请安装PHP环境后重启服务器');
|
||
}
|
||
} catch (error) {
|
||
console.error('PHP环境检测失败:', error.message);
|
||
}
|
||
})();
|
||
|
||
// AI图像编辑路由
|
||
const aiImageEditRouter = require('./routes/ai-image-edit');
|
||
app.use('/api/ai-image-edit', aiImageEditRouter);
|
||
|
||
// AI图片分析路由
|
||
const aiAnalyzerRouter = require('./routes/api/ai-analyzer');
|
||
app.use('/api/ai', aiAnalyzerRouter);
|
||
|
||
// 初始化数据库连接
|
||
const initApp = async () => {
|
||
try {
|
||
await connectDB();
|
||
console.log('数据库连接已初始化');
|
||
} catch (error) {
|
||
console.error('初始化数据库连接失败:', error);
|
||
}
|
||
};
|
||
|
||
// 服务启动时的检查
|
||
(async () => {
|
||
try {
|
||
console.log('服务器启动,执行初始化检查...');
|
||
|
||
// 检查Minio连接
|
||
const minioClient = require('./utils/minio-client').getMinioClient();
|
||
try {
|
||
await minioClient.bucketExists(process.env.MINIO_BUCKET_NAME);
|
||
console.log('已成功连接到MinIO对象存储');
|
||
} catch (err) {
|
||
console.error('MinIO连接失败:', err.message);
|
||
console.warn('图像存储功能可能不可用,请检查MinIO配置');
|
||
}
|
||
|
||
// 检查MongoDB连接
|
||
if (mongoose.connection.readyState === 1) {
|
||
console.log('已成功连接到MongoDB数据库');
|
||
} else {
|
||
console.error('MongoDB连接状态异常,当前状态:', mongoose.connection.readyState);
|
||
}
|
||
|
||
// 日志初始化检查完成的消息
|
||
console.log('服务器初始化检查完成');
|
||
console.log(`服务器运行在 ${process.env.NODE_ENV || 'development'} 模式下`);
|
||
console.log(`监听端口: ${app.get('port')}`);
|
||
console.log('------------------------------');
|
||
} catch (err) {
|
||
console.error('服务器初始化检查失败:', err);
|
||
}
|
||
})();
|
||
|
||
// 导出应用和初始化函数
|
||
module.exports = { app, initApp };
|