Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我有没有办法使用Next.js api路由发送404页面_Javascript_Reactjs_Next.js - Fatal编程技术网

Javascript 我有没有办法使用Next.js api路由发送404页面

Javascript 我有没有办法使用Next.js api路由发送404页面,javascript,reactjs,next.js,Javascript,Reactjs,Next.js,基本上,我有一个API路由/API/signin.js。我想接受post请求,并在收到get请求时返回404页面。我没有找到任何方法返回404页面而不执行重定向之类的操作。任何帮助都将不胜感激。多谢各位 export default async function Signin(req, res) { // /////////////////////////////////////////////////////// // // Here is where I want to se

基本上,我有一个API路由/API/signin.js。我想接受post请求,并在收到get请求时返回404页面。我没有找到任何方法返回404页面而不执行重定向之类的操作。任何帮助都将不胜感激。多谢各位

export default async function Signin(req, res) {
    // /////////////////////////////////////////////////////// //
    // Here is where I want to send the 404 custom 404.js page //
    // /////////////////////////////////////////////////////// //
    if(req.method === "GET") {
        return res.status(404).send();
    }
    
    if(req.method !== "POST") {
        return res.status(404).send();
    }

    try {
        const { cookies, body } = req;
        console.log(req.cookies);

        // Signin logic...
        
    } catch (err) {
        res.status(500).json({ err: "Internal server error" });
    }
}

作为一种解决方法,您可以使用ReactDOMServer的函数

将React元素呈现为其初始HTML。React将返回一个HTML字符串。您可以使用此方法在服务器上生成HTML,并在初始请求时向下发送标记,以更快地加载页面,并允许搜索引擎为SEO目的对页面进行爬网

或服务器的功能

与renderToString类似,只是这不会创建React在内部使用的额外DOM属性,例如data reactroot。如果您想将React用作简单的静态页面生成器,这非常有用,因为去掉额外的属性可以节省一些字节

//pages/404.js
导出默认函数Custom404(){
返回404-未找到页面;
}
//pages/api/signin.js
从“react dom/server”导入ReactDOMServer;
从“./404”/”中找不到导入导入404页面
导出默认功能登录(req、res){
如果(请求方法==“获取”){
返回res
.现状(404)
.send(ReactDOMServer.renderToStaticMarkup());
}
如果(请求方法!=“POST”){
返回res.status(404.send();
}
试一试{
const{cookies,body}=req;
控制台日志(请求cookie);
//符号逻辑。。。
}捕捉(错误){
json({err:“内部服务器错误”});
}
}
通过这种方式,您可以发送一个
404
状态代码,并发送一个html表示,而无需重定向。

我尝试使用renderToStaticMarkup,但唯一的问题是,这阻止了任何导入的css模块工作(因为Next.js强制您使用name.module.css命名约定)。最后,如果没有办法解决这个问题,我可以在jsx中使用
标记并将所有css放在那里。编辑:我忘了提到导入_app.js文件的全局样式也不起作用。
// pages/404.js
export default function Custom404() {
  return <h1>404 - Page Not Found</h1>;
}
// pages/api/signin.js
import ReactDOMServer from "react-dom/server";
import NotFound from "../404"; // import your 404 page

export default function Signin(req, res) {
  if (req.method === "GET") {
    return res
      .status(404)
      .send(ReactDOMServer.renderToStaticMarkup(<NotFound />));
  }

  if (req.method !== "POST") {
    return res.status(404).send();
  }

  try {
    const { cookies, body } = req;
    console.log(req.cookies);

    // Signin logic...
  } catch (err) {
    res.status(500).json({ err: "Internal server error" });
  }
}