【问题标题】:How to send data from express server to client on Next js?如何在 Next js 上将数据从快递服务器发送到客户端?
【发布时间】:2020-01-02 08:25:33
【问题描述】:

我有一个带有 express 的下一个 js 网络应用程序。我想将数据发布到此网页,在我的服务器上获取它并将其传递到我的下一个 js 页面。我是下一个 js 和 express 的新手。以下是我的 server.js 代码:-

const express = require('express')
const next = require('next')

const port = parseInt(process.env.PORT, 10) || 3000
const dev = process.env.NODE_ENV !== 'production'
const app = next({ dev })
const handle = app.getRequestHandler()

app.prepare().then(() => {
  const server = express()

  server.use(express.json());

  server.post("/posts", (req, res) => {
    req.body.data
    console.log("Post data : ",req.body.data)
    console.log("JSON Response : ",res.json());
  });

  // server.get('/posts/', (req, res) => {
  //   console.log("Post data again : ",res.body.data)
  //   return app.render(req, res, '/posts', { id: "Pritam" })
  // })

  server.get('*', (req, res) => {
    return handle(req, res)
  })

  server.listen(port, err => {
    if (err) throw err
    console.log(`> Ready on http://localhost:${port}`)
  })
})

当我使用 get request 时,我可以使用 return app.render(req, res, '/posts', { name: "Pritam" }) 从我的服务器向客户端发送数据,但是当我尝试执行与帖子相同的事情我无法在我的客户上接收任何数据。最初,我尝试在查询参数中传递值,它工作正常。以下是我的posts.js 代码:-

import React, { Component } from 'react'

class Posts extends Component {
  static async getInitialProps ({ query: { id } }) {
    console.log("Response is ")
    return { postId: id }
  }
  render () {
    return (
      <div>
        <p>Post data {this.props.postId}</p>
      </div>
    )
  }
}


export default Posts;

根据@JasperBernales 的建议,我对 server.js 进行了以下更改:-

  server.post("/api/agreement", (req, res) => {
    req.body.data
    res.send("ESAnup")
    console.log("Post data agreement: ",req.body.data)
    console.log("JSON Response agreement : ",res.json());
  });

我还为 api/agreement.js 创建了一个目录,其中包含以下代码:-

export default function handle(req, res) {
  console.log("Request Body",req.body.data) // The request body
  console.log("Request Query :",req.query) // The url querystring
   console.log(req.cookies) // The passed cookies
   res.json({ title: 'Hello World JSON' })
   res.end('Hello World')
}

我可以看到我的服务器响应,但我仍然无法在我的客户端上获取它。我正在尝试在 Postman 上对其进行测试。

我想从我的服务器代码创建一个端点,以将数据发送到我的客户端并在 getInitialProps 中接收该数据并在我的客户端呈现它。 非常感谢任何帮助或建议。谢谢。

【问题讨论】:

    标签: javascript node.js reactjs express next.js


    【解决方案1】:

    nextjs 9 支持结帐api routes

    基本上你需要在pages文件夹下创建一个名为api的文件夹。

    例如,您在文件夹中有一个名为 sample.js 的文件

    export default function handle(req, res) {
      console.log(req.body) // The request body
      console.log(req.query) // The url querystring
      console.log(req.cookies) // The passed cookies
      res.end('Hello World')
    }
    

    然后这个文件夹中的每个文件都将被称为路由,您可以在客户端中将其称为/api/sample

    【讨论】:

    • 非常感谢您的及时回复。句柄函数会成为我的 sample.js 的一部分吗?我有一个非常简单的要求,我有一个 android 应用程序,它将数据发布到一个 Web 应用程序,该应用程序将在 express 服务器上获取数据并决定渲染哪个路由并将一些数据传递给路由。在这种情况下,API 路由会有所帮助吗?谢谢。
    • 嗨 Jasper,我觉得我可能走在正确的道路上,但我仍然无法在客户端收到任何东西。
    • 你用的是nextjs 9吗?
    • 嗨 Anup,即使我遇到了类似的问题。你解决了吗?
    猜你喜欢
    • 2019-05-27
    • 2022-12-13
    • 2015-05-23
    • 2022-01-06
    • 1970-01-01
    • 1970-01-01
    • 2013-04-11
    • 2021-12-07
    • 1970-01-01
    相关资源
    最近更新 更多