修改代码 const add=()=>{ let params = new URLSearchParams() params.append('user_id','localStorage.getItem("id")') axios.post("/shelf/add",{ user_id:localStorage.getItem("id"), book_id:route.query.bookId }).then((res)=>{ const data = res.data console.log(data) }) }
时间: 2023-11-27 22:49:01 浏览: 102
这段代码的问题在于将 `localStorage.getItem("id")` 当做字符串添加到了 URLSearchParams 对象中,而不是添加 `localStorage.getItem("id")` 返回的值。要修正这个问题,可以像下面这样修改代码:
```javascript
const add = () => {
let params = new URLSearchParams();
params.append('user_id', localStorage.getItem('id'));
axios.post('/shelf/add', {
user_id: localStorage.getItem('id'),
book_id: route.query.bookId,
}).then((res) => {
const data = res.data;
console.log(data);
});
};
```
这样做会将 `localStorage.getItem('id')` 返回的值添加到 `URLSearchParams` 对象中,而不是将字符串 `'localStorage.getItem("id")'` 添加到其中。
相关问题
<a-upload-dragger v-model:fileList="fileList" name="file" :multiple="true" action="https://www.mocky.io/v2/5cc8019d300000980a055e76" @change="handleChange"> <p class="ant-upload-drag-icon"> <inbox-outlined></inbox-outlined> </p> <p class="ant-upload-text">请拖拽上传文件</p> <p class="ant-upload-hint"> (或点击上传文件) </p> </a-upload-dragger>如何上传配置
这是一个基于Vue Ant Design组件库的上传组件`a-upload-dragger`,它的上传配置可以在组件上绑定相应的属性和事件来实现。
以下是一个示例代码,演示了如何配置上传组件:
```vue
<template>
<a-upload-dragger
v-model:fileList="fileList"
name="file"
:multiple="true"
:show-upload-list="false"
:before-upload="beforeUpload"
:custom-request="customRequest"
@change="handleChange"
>
<p class="ant-upload-drag-icon">
<inbox-outlined></inbox-outlined>
</p>
<p class="ant-upload-text">请拖拽上传文件</p>
<p class="ant-upload-hint">(或点击上传文件)</p>
</a-upload-dragger>
</template>
<script>
export default {
data() {
return {
fileList: [],
};
},
methods: {
beforeUpload(file) {
// 验证文件类型和大小等条件
return true;
},
customRequest({ file, onSuccess, onError }) {
// 发起上传请求
const xhr = new XMLHttpRequest();
xhr.open('POST', 'https://www.mocky.io/v2/5cc8019d300000980a055e76');
xhr.setRequestHeader('Authorization', 'Bearer ' + localStorage.getItem('token'));
xhr.onreadystatechange = () => {
if (xhr.readyState === 4) {
if (xhr.status === 200) {
onSuccess(xhr.responseText, xhr);
} else {
onError(xhr.response, xhr);
}
}
};
const formData = new FormData();
formData.append('file', file);
xhr.send(formData);
},
handleChange({ fileList }) {
this.fileList = fileList;
},
},
};
</script>
```
在这个示例中,我们使用了`v-model`指令绑定了`fileList`属性,用于存储上传文件列表。我们设置了`name`属性为`file`,表示上传文件的字段名。`multiple`属性设置为`true`,允许上传多个文件。`show-upload-list`属性设置为`false`,隐藏上传列表。`before-upload`属性绑定了一个函数,用于在上传前验证文件类型和大小等条件。`custom-request`属性绑定了一个函数,用于发起上传请求。`@change`事件监听上传列表的变化,将变化后的文件列表存储到`fileList`属性中。
在`customRequest`函数中,我们使用`XMLHttpRequest`对象发起了一个POST请求,将文件通过FormData对象添加到请求中。`Authorization`请求头可以用于在上传时添加Token等验证信息。
在`handleChange`函数中,我们将变化后的文件列表存储到`fileList`属性中,这样可以在上传完成后获取到上传的文件列表。
在之前任务用户登录成功后,完成手动文件上传过程(可以借助UI框架),文件上传过程需进行token验证,验证token有效才能完成文件上传,实现前后端代码,并提交核心代码代码块
前端代码:
```
<template>
<div>
<input type="file" @change="handleFileUpload">
</div>
</template>
<script>
import axios from 'axios'
export default {
methods: {
async handleFileUpload(event) {
const file = event.target.files[0]
const token = localStorage.getItem('token')
const formData = new FormData()
formData.append('file', file)
try {
const response = await axios.post('http://example.com/upload', formData, {
headers: {
Authorization: `Bearer ${token}`
}
})
console.log(response.data)
} catch (error) {
console.error(error)
}
}
}
}
</script>
```
后端代码:
```
const express = require('express')
const multer = require('multer')
const jwt = require('jsonwebtoken')
const app = express()
const storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, 'uploads')
},
filename: function (req, file, cb) {
cb(null, file.fieldname + '-' + Date.now())
}
})
const upload = multer({ storage: storage })
app.post('/upload', verifyToken, upload.single('file'), (req, res, next) => {
res.json({ message: 'File uploaded successfully' })
})
function verifyToken(req, res, next) {
const token = req.headers.authorization.split(' ')[1]
if (!token) {
return res.status(401).send('Unauthorized request')
}
try {
const decodedToken = jwt.verify(token, 'secret')
req.userData = decodedToken
next()
} catch (error) {
return res.status(401).send('Unauthorized request')
}
}
app.listen(3000, () => {
console.log('Server started on port 3000')
})
```
核心代码:
前端代码中的`Authorization`头部是用于携带token的,后端代码中的`verifyToken`函数用于验证token是否有效。
```
headers: {
Authorization: `Bearer ${token}`
}
function verifyToken(req, res, next) {
const token = req.headers.authorization.split(' ')[1]
if (!token) {
return res.status(401).send('Unauthorized request')
}
try {
const decodedToken = jwt.verify(token, 'secret')
req.userData = decodedToken
next()
} catch (error) {
return res.status(401).send('Unauthorized request')
}
}
```
阅读全文