【问题标题】:Handling POST API next.js and architecture处理 POST API next.js 和架构
【发布时间】:2021-05-05 04:35:10
【问题描述】:

我正在构建我的第一个下一个 js 应用程序,我的结构是;

  • 反应 - 前端
  • Next.js - 后端,但实际上只是 API 的集合
  • MongoDB - 文档数据存储

前端运行良好,正在将表单数据发布到我指定的 API。我遇到的问题是如何处理 API 中的 POST 数据?

我下面的代码处理查询字符串调用,但不处理 POST 调用。我还没有添加 req.method 来确定哪个已被调用,因为我需要 API 来允许处理查询字符串和表单发布数据。

import { connectToDatabase } from "../../util/mongodb";
export default async function (req, res) {

    try {
    const { db } = await connectToDatabase();
    const collection = db.collection("answers");
    const doc = JSON.parse('{"' + decodeURI(req.url).replace(/"/g, '\\"').replace(/&/g, '","').replace(/=/g,'":"') + '"}')
    const result = await collection.insertOne(doc);
    } finally {
       await  db.close();
    }
};

我已经阅读了很多关于使用 Express 中间件的内容,在我看来,这在我正在构建的简单应用程序中是多余的(尽管我理解为什么 React JS 应用程序需要 Express)。

我遵循了 Next.js 参考文档,它有一个 //Handle POST data here,但没有实际示例。

所以我现在质疑我是否采取了正确的方法。

【问题讨论】:

    标签: next.js


    【解决方案1】:

    所以关于这个问题,我花了几天时间寻找解决方案,绝大多数处理路由的教程都跳过了 POST 本身的实际处理。文档中没有直接提到的关键元素是req.body

    这是我的解决方案;

    import { connectToDatabase } from "../../util/mongodb";
    import questions from "./questions";
    export default async function (req, res) {
        const { db } = await connectToDatabase();
        try {
            const questions = await db
            const collection = questions.collection("answers");
            const doc = req.body;
            const result = await collection.insertOne(doc);
        } finally {
            res.end()
        }
    };
    

    它缺少对方法的检查,这是下一个,但直截了当,处理 POST 是一个更大的挑战,尽管处理起来非常简单,但在其他地方并不明显,所以希望这会有所帮助。

    如果上述方法不起作用,我意识到我是在指定 JSON 的表单标题上发布的,这不起作用。如果需要,您还可以将 req.body 包装在 JSON.stringify 中。

    【讨论】:

      猜你喜欢
      • 2020-02-26
      • 1970-01-01
      • 2019-04-24
      • 2011-02-07
      • 2010-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-17
      相关资源
      最近更新 更多