请为学生宿舍信息管理系统中每日打卡功能编写前后端代码
时间: 2023-05-30 08:02:11 浏览: 96
前端代码:
```javascript
import React, { useState } from 'react';
import axios from 'axios';
const DailyCheckIn = () => {
const [isChecked, setIsChecked] = useState(false);
const handleCheckIn = async () => {
try {
const res = await axios.post('/api/checkin');
if (res.status === 200) {
setIsChecked(true);
}
} catch (err) {
console.error(err);
}
};
return (
<div>
{isChecked ? (
<p>今日已打卡</p>
) : (
<button onClick={handleCheckIn}>打卡</button>
)}
</div>
);
};
export default DailyCheckIn;
```
后端代码:
```javascript
const express = require('express');
const router = express.Router();
const { verifyToken } = require('../middlewares/auth');
const { checkin } = require('../controllers/checkinController');
// 打卡
router.post('/checkin', verifyToken, checkin);
module.exports = router;
```
```javascript
const Checkin = require('../models/checkinModel');
// 打卡
exports.checkin = async (req, res) => {
try {
const { userId } = req.decoded;
const today = new Date();
const checkin = await Checkin.findOneAndUpdate(
{ userId, date: today },
{ isChecked: true },
{ upsert: true, new: true }
);
res.status(200).json(checkin);
} catch (err) {
console.error(err);
res.status(500).send('服务器错误');
}
};
```
```javascript
const mongoose = require('mongoose');
const checkinSchema = new mongoose.Schema(
{
userId: {
type: mongoose.Schema.Types.ObjectId,
ref: 'User',
required: true,
},
date: {
type: Date,
default: Date.now,
},
isChecked: {
type: Boolean,
default: false,
},
},
{ timestamps: true }
);
const Checkin = mongoose.model('Checkin', checkinSchema);
module.exports = Checkin;
```
以上代码为一个简单的实现,仅供参考。实际项目中应该根据具体需求进行修改。