簡體   English   中英

JavaScript:Date對象在發送到后端時會轉換為字符串

[英]JavaScript: Date object convert to string when sent to backend

問題總結

我有一個React Native應用程序,在其中創建一個日期對象,將其分配給startTime並通過Axios將其發送到我的后端node.js服務器。 當我在后端接收到變量后立即鍵入console.log時,類型是字符串。 我已經在前端完成了typeof console.logs,以確保它一直是日期對象,直到它通過Axios發送到后端為止。

由於我是新開發人員,這可能是我不熟悉的axios或HTTPS。 任何幫助將不勝感激。 我已經在下面包含了所有相關代碼,但是如果您認為我應該添加更多內容,請告訴我。

React Native API Call startTime控制台日志作為對象

export const confirmDailyComp = async data =>
  new Promise(async (resolve, reject) => {
    const { userId, compName, startTime, competitors, lengthType, privacyType  } = data; //FIXME: add competition back here, took it out to throw error on purpose
    console.log('confirmDailyComp typeof startTime', typeof startTime) //this console logs as an object
    try {
      const response = await http.post("/v1/route", {
        userId,
        compName,
        startTime,
        competitors,
        lengthType, 
        privacyType
      });
      const competition = response.data.newComp;
      resolve(competition);
    } catch (err) {
      console.log("error fetching friends", err);
      reject(err);
    }
  });

Node.js控制器

startTime控制台以字符串形式記錄日志

當然,在其余的路由中還有更多的代碼,但是為了簡潔我沒有包括它。 如果您認為有必要,我很樂意將其包括在內。

start: async function(req, res, next) {
    try {
      const {
        competitors,
        startTime,
        userId,
        compName,
        privacyType,
        lengthType,
        seasonNum
      } = req.body;
      console.log("typeof startDate", typeof startTime); // console logs as a string
} catch(err) {
}

嘗試考慮將startTime發送為時間戳(類似於1567114948292 )。

現在您可以在服務器中獲取此值並獲取時間。

JavaScript Date是一個對象,並且JSON規范沒有日期。 這就是為什么當您通過JSON發送它時,它將被序列化為字符串,因為Axios默認情況下會將它序列化為UTC格式的字符串。

您有三種選擇:

  1. 了解它們是UTC字符串,然后創建一個可以正確解析它們的日期對象。
  2. 將日期自己轉換為數字格式。

  3. 第三個選項是JSON.parse方法,該方法具有一個可選參數來傳遞您的自定義解析器,您可以使用它來構建自定義日期解析器。 您可以從中得到一個想法:

https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/JSON/parse#Using_the_reviver_parameter

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM