{ "name": "nxxmdata-backend", "version": "2.2.0", "description": "宁夏智慧养殖监管平台后端API服务", "main": "server.js", "author": "NXXM Development Team", "license": "MIT", "keywords": [ "nodejs", "express", "sequelize", "mysql", "api", "smart-farming", "iot", "monitoring" ], "engines": { "node": "16.20.2", "npm": ">=8.0.0" }, "scripts": { "start": "node server.js", "dev": "nodemon server.js", "init-db": "node scripts/init-db.js", "test-connection": "node scripts/test-connection.js", "test-map-api": "node scripts/test-map-api.js", "migrate": "node run-migration.js", "seed": "node scripts/seed-manager.js", "backup": "node scripts/backup-db.js", "restore": "node scripts/restore-db.js", "lint": "eslint . --ext .js", "lint:fix": "eslint . --ext .js --fix", "test": "jest", "test:watch": "jest --watch", "test:coverage": "jest --coverage", "build": "echo 'No build step required for Node.js backend'", "clean": "node -e \"const fs = require('fs'); const path = require('path'); try { const logDir = 'logs'; const tempDir = 'uploads/temp'; if (fs.existsSync(logDir)) { fs.readdirSync(logDir).forEach(file => { if (file.endsWith('.log')) fs.unlinkSync(path.join(logDir, file)); }); } if (fs.existsSync(tempDir)) { fs.rmSync(tempDir, { recursive: true, force: true }); } console.log('✅ Cleanup completed'); } catch (err) { console.error('❌ Cleanup failed:', err.message); }\"", "health-check": "node -e \"const { sequelize } = require('./config/database-simple'); sequelize.authenticate().then(() => { console.log('✅ Database connection healthy'); process.exit(0); }).catch(err => { console.error('❌ Database connection failed:', err.message); process.exit(1); });\"" }, "dependencies": { "archiver": "^6.0.1", "axios": "^1.6.0", "bcryptjs": "^2.4.3", "compression": "^1.7.4", "cors": "^2.8.5", "dotenv": "^16.3.1", "ejs": "^3.1.9", "exceljs": "^4.4.0", "express": "^4.18.2", "express-rate-limit": "^7.1.5", "express-validator": "^7.0.1", "helmet": "^7.1.0", "jsonwebtoken": "^9.0.2", "moment": "^2.29.4", "multer": "^1.4.5-lts.1", "mysql2": "^3.6.5", "node-cron": "^3.0.3", "nodemailer": "^6.9.8", "redis": "^4.6.12", "sequelize": "^6.35.2", "sharp": "^0.33.2", "swagger-jsdoc": "^6.2.8", "swagger-ui-express": "^5.0.0", "winston": "^3.11.0", "xlsx": "^0.18.5" }, "devDependencies": { "@types/jest": "^29.5.8", "eslint": "^8.55.0", "eslint-config-standard": "^17.1.0", "eslint-plugin-import": "^2.29.0", "eslint-plugin-node": "^11.1.0", "eslint-plugin-promise": "^6.1.1", "jest": "^29.7.0", "nodemon": "^3.0.2", "rimraf": "^5.0.5", "supertest": "^6.3.3" }, "jest": { "testEnvironment": "node", "collectCoverageFrom": [ "controllers/**/*.js", "models/**/*.js", "routes/**/*.js", "utils/**/*.js", "!**/node_modules/**", "!**/migrations/**", "!**/seeds/**" ], "coverageDirectory": "coverage", "coverageReporters": [ "text", "lcov", "html" ] }, "eslintConfig": { "extends": [ "standard" ], "env": { "node": true, "es2021": true, "jest": true }, "rules": { "no-console": "warn", "no-unused-vars": "error", "prefer-const": "error" } }, "repository": { "type": "git", "url": "https://github.com/nxxmdata/smart-farming-platform.git" }, "bugs": { "url": "https://github.com/nxxmdata/smart-farming-platform/issues" }, "homepage": "https://github.com/nxxmdata/smart-farming-platform#readme" }