如何调用NextJs api从MongoDB获取数据?
我创建了一个从 MongoDb 获取数据的 products api。
import dbConnect from "../../../lib/mongodb";
import Products from "../../../models/Products";
export default async function handler(req, res) {
const { method } = req;
dbConnect();
if (method === "GET") {
try {
const products = await Products.find();
res.status(200).json(products);
} catch (err) {
res.status(500).json(err);
}
}
if (method === "POST") {
try {
const product = await Products.create(req.body);
res.status(201).json(product);
} catch (err) {
res.status(500).json(err);
}
}
}
我成功连接到数据库并在 localhost 中获取数据。但是当我将其部署到 vercel 上时,出现500 内部错误。我在react-admindataProvider.js中使用这个api,就像这样
import { fetchUtils } from "react-admin";
import { stringify } from "query-string";
const httpClient = fetchUtils.fetchJson;
const dataProvider = {
getList: (resource, params) => {
const { page, perPage } = params.pagination;
const query = {
range: JSON.stringify([(page - 1) * perPage, page * perPage - 1]),
};
const url = `/api/${resource}?${stringify(
query
)}`; //here the API that I call
return httpClient(url).then(({ headers, json }) => ({
data: json.map((resource) => ({ ...resource, id: resource._id })),
total: parseInt(headers.get("content-range").split("/").pop(), 10),
}));
},
};
export default dataProvider;
开发者工具中network的屏幕截图
我想分享我的域名链接
I have created a products api that fetch data from MongoDb.
import dbConnect from "../../../lib/mongodb";
import Products from "../../../models/Products";
export default async function handler(req, res) {
const { method } = req;
dbConnect();
if (method === "GET") {
try {
const products = await Products.find();
res.status(200).json(products);
} catch (err) {
res.status(500).json(err);
}
}
if (method === "POST") {
try {
const product = await Products.create(req.body);
res.status(201).json(product);
} catch (err) {
res.status(500).json(err);
}
}
}
I am successfully connect to database and fetch the data in localhost.But when I deploying it on vercel, I take 500 Internal Error. I am using this api in react-admin dataProvider.js just like that
import { fetchUtils } from "react-admin";
import { stringify } from "query-string";
const httpClient = fetchUtils.fetchJson;
const dataProvider = {
getList: (resource, params) => {
const { page, perPage } = params.pagination;
const query = {
range: JSON.stringify([(page - 1) * perPage, page * perPage - 1]),
};
const url = `/api/${resource}?${stringify(
query
)}`; //here the API that I call
return httpClient(url).then(({ headers, json }) => ({
data: json.map((resource) => ({ ...resource, id: resource._id })),
total: parseInt(headers.get("content-range").split("/").pop(), 10),
}));
},
};
export default dataProvider;
Here the screenshots of network in developer tools
I want to share my domain link
https://electronic-products47.vercel.app/
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我认为,在Monge DB网络访问中您需要将0.0.0.0/0 IP添加到“白名单”中,以便您的Vercel服务器不被Mongo DB数据库阻止。
I think, in Monge DB network access You need to add 0.0.0.0/0 IP to the "whitelist" so that Your Vercel server is not being blocked by Mongo DB Database.