如何通过 fetch() 将对象发送到 Next.js 中的动态 api 路由
How to send an object via fetch() to a dynamic api route in Next.js
我无法将对象发送到 Next 中的动态 api 路由。发送常规字符串工作正常,我可以毫无问题地更新我的 MongoDB。通过请求数据发送对象时仅显示为 [object Object].
这是当前的代码片段:
客户端
let bookData = {
title: data[i].title,
author: data[i].author,
date: data[i].date,
isbn: data[i].isbn,
description: data[i].description,
image: data[i].image
}
fetch(`/api/db/saveBook/${bookData}`);
API 路线:/pages/api/db/saveBook/[book].js
import { MongoClient } from "mongodb";
export default async function handler(req, res) {
const book = req.query;
const client = await MongoClient.connect(process.env.MONGODB_URI);
const db = client.db();
const collection = db.collection('books');
const addBook = await collection.insertOne(book);
client.close();
res.json(addBook);
}
考虑2个步骤首先通过post请求发送数据,然后通过fetch请求指定内容类型。看例子:
const req = await fetch(url, {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({
email: formData.get("email"),
password: formData.get("password"),
}),
});
所以这是我误解了何时在 next 中使用动态 API 路由的情况。下面是我尝试做的事情的正确实现,这只是一个基本的 POST 使用 fetch 的请求,就像这里提到的其他人一样。
客户:
// Store book data to be sent to API route
let bookData = {
title: data[i].title,
author: data[i].author,
date: data[i].date,
isbn: data[i].isbn,
description: data[i].description,
image: data[i].image
}
// Send the book data to the backend API to be saved
fetch('/api/db/saveBook',
{
method: 'POST',
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify(bookData),
}
);
API路线:
import { MongoClient } from "mongodb";
export default async function handler(req, res) {
const book = req.body;
const client = await MongoClient.connect(process.env.MONGODB_URI);
const db = client.db();
const collection = db.collection('books');
const addBook = await collection.insertOne(book);
client.close();
res.json(addBook);
}
我无法将对象发送到 Next 中的动态 api 路由。发送常规字符串工作正常,我可以毫无问题地更新我的 MongoDB。通过请求数据发送对象时仅显示为 [object Object].
这是当前的代码片段:
客户端
let bookData = {
title: data[i].title,
author: data[i].author,
date: data[i].date,
isbn: data[i].isbn,
description: data[i].description,
image: data[i].image
}
fetch(`/api/db/saveBook/${bookData}`);
API 路线:/pages/api/db/saveBook/[book].js
import { MongoClient } from "mongodb";
export default async function handler(req, res) {
const book = req.query;
const client = await MongoClient.connect(process.env.MONGODB_URI);
const db = client.db();
const collection = db.collection('books');
const addBook = await collection.insertOne(book);
client.close();
res.json(addBook);
}
考虑2个步骤首先通过post请求发送数据,然后通过fetch请求指定内容类型。看例子:
const req = await fetch(url, {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({
email: formData.get("email"),
password: formData.get("password"),
}),
});
所以这是我误解了何时在 next 中使用动态 API 路由的情况。下面是我尝试做的事情的正确实现,这只是一个基本的 POST 使用 fetch 的请求,就像这里提到的其他人一样。
客户:
// Store book data to be sent to API route
let bookData = {
title: data[i].title,
author: data[i].author,
date: data[i].date,
isbn: data[i].isbn,
description: data[i].description,
image: data[i].image
}
// Send the book data to the backend API to be saved
fetch('/api/db/saveBook',
{
method: 'POST',
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify(bookData),
}
);
API路线:
import { MongoClient } from "mongodb";
export default async function handler(req, res) {
const book = req.body;
const client = await MongoClient.connect(process.env.MONGODB_URI);
const db = client.db();
const collection = db.collection('books');
const addBook = await collection.insertOne(book);
client.close();
res.json(addBook);
}