【问题标题】:display string on client side by fetching data from server side通过从服务器端获取数据在客户端显示字符串
【发布时间】:2021-07-21 17:51:55
【问题描述】:

我试图通过从服务器端获取结果来在客户端显示一个字符串,但由于某种原因,它没有显示获取的数据。当我直接在 js 文件上控制台记录变量时,服务器成功打印了字符串。该程序不会将变量导出到客户端以显示它。我不知道我哪里出错了。任何帮助表示赞赏。提前致谢。

const router = require("express").Router();
const {
  callName
} = require("pathJs");

router.route("PathRoute").get(async(req, res) => {
  const Result = await callName();
  return res.json(Result);
});


module.exports = router;

function name() {
  const liner = "this works"
  console.log(liner)
  //updated
  return liner;

}

async function callName() {
  const data1 = await name()
  return data1;

}

callName()

<p id="insertHere" style="color: white;"></p>


<script>
  async function caller() {
    await fetch(`http://localhost:5000/api/PATH`)
      .then((res) => {
        return new Promise((resolve, reject) => {
          setTimeout(() => {
            resolve(res.json())
          }, 1000)
        })

      }).then((response) => {
          console.log(response)
          document.getElementById("insertHere").innerHTML = response.liner

        }

      )
  }
</script>

const express = require("express");
const cors = require("cors");
const routePath = require("./routePath");
const {
  response
} = require("express");
require("dotenv").config({
  debug: process.env.DEBUG
});
const port = process.env.PORT || 5000;
const app = express();
app.use(cors());
app.use(express.json());
app.use("/api", routePath);
app.listen(port, () => {
  console.log(`server is running on port: http://localhost:${port}`);
});

【问题讨论】:

  • function name() { 记录一个值,但它不返回任何内容。
  • 我必须在函数name 中返回liner。 @昆汀
  • 我返回了该函数下函数名中的所有数据。@Quentin
  • name 没有return 语句,因此它返回undefinedcallName 确实有一个return 语句,它返回name 的返回值......这是undefined 所以callName 返回(因为它是一个async 函数)一个解析为undefined 的承诺。如果你想返回 liner 的值,那么你必须返回它。
  • 我在 name 函数中返回了liner,但字符串仍然没有显示在客户端。 @昆汀

标签: javascript node.js


【解决方案1】:

pathJs 中没有导出,您希望 name() 返回包含 liner 的对象。你需要

function name() {
  const liner = "this works"
  console.log(liner)
  //updated
  return {liner};

}

async function callName() {
  const data1 = await name()
  return data1;

}

callName()

module.exports = { callName };

后端可能在处理请求时因TypeError: callName is not a function 而崩溃,因此不发送响应。

【讨论】:

  • 是的,这是主要问题,但我得到 liner 现在未在客户端定义。@jabaa
  • @anon20010813 当然不是。 liner 是服务器端变量。在客户端应该如何知道它? callName 返回字符串 "this works",仅此而已。
  • 导出特定变量不起作用? @jabaa
  • @anon20010813 您可能应该阅读What is the difference between client-side and server-side programming? 在服务器上评估服务器端代码。客户端代码在另一台计算机上进行评估。他们不共享相同的内存。如果你想分享价值,你必须发送它们。您不能简单地将变量从服务器端导出到客户端。
  • 感谢大家的帮助。刚刚想出了如何将它插入到我的内部 HTML 中,我返回了像 return {liner} 这样的衬垫并将其插入为document.getElementById("insertHere").innerHTML = response.liner 。感谢 cs vs ss 解释链接。 @贾巴
猜你喜欢
  • 2015-09-30
  • 1970-01-01
  • 1970-01-01
  • 2021-10-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-11
  • 1970-01-01
相关资源
最近更新 更多