簡體   English   中英

我將如何遍歷 json 文件?

[英]How would I loop through a json file?

我正在制作一個驗證系統,人們將他們的帳戶鏈接到兩個不同的平台上。 我已經讓代碼工作了,但現在我需要檢查代碼是否有效。 我在 json 文件上使用 .forEach ,但我不斷收到錯誤消息:

client.verificationCodes.forEach 不是 function

它崩潰了。

這是 json 文件的樣子:

我的 json 文件

這是我的代碼:

const Discord = require('discord.js')
const rbx = require('noblox.js')
const fs = require("fs")
const express = require("express")
const app = express()
app.use(express.json())

const client = new Discord.Client()
client.verificationCodes = require("./codes.json")

require("dotenv").config()
const port = process.env.PORT
const serverKey = process.env.SERVER_KEY
const cookie = process.env.COOKIE

function randomString(length, chars) {
    var result = '';
    for (var i = length; i > 0; --i) result += chars[Math.floor(Math.random() * chars.length)];
    return result;
}

client.on("ready", () => {
    console.log("Client is ready.")
})

app.post("/getVerificationCode", function(req,res,next) {
    console.log("Recieved")
    if (req.body.serverKey !== serverKey) {
        console.log("Invalid serverKey supplied.")
        
        return res.status(403).json({
            error: "You do not have permission to use this."
        })
    }

    let verificationCode = randomString(4,'0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ').toUpperCase()
    const userID = parseInt(req.body.userid)
    console.log(verificationCode)

    client.verificationCodes[userID] = {
        code: verificationCode
    }

    fs.writeFile("./codes.json", JSON.stringify(client.verificationCodes,null,4), err => {
        if (err) throw err
    })

    return res.status(200).json({
        VerificationCode: verificationCode
    })
})

app.get("/*", function(req,res,next) {
    return res.status(200).json({})
})

client.on("message", (message) => {
    if (message.content.toLowerCase().startsWith("!verify")) {
      let args = message.content.split(" ")
      if (!args[1]) {
        message.reply("You must specify a code.")
        return
      }
      client.verificationCodes.forEach(vCode => {
          if (vCode.Code === args[1]) {
              let username = rbx.getUsernameFromId(vCode)
              message.member.setNickname(username)
          }
      })
    }
  })

app.listen(port)
console.log(`App listening on port ${port}`)

function rbxLogin(newCookie) {

    try {
        rbx.setCookie(newCookie)
    } catch(err) {
        console.log(`Invalid cookie supplied, or expired. ${err}`)
    }


}

// rbxLogin(cookie)



client.login(process.env.BOT_TOKEN)

我感謝幫助!

您有一個語法錯誤,因為 .forEach 不適用於對象,但適用於數組,並且由於 client.verificationCodes 是 object 那么您需要使用Object.entries將其轉換為鍵值數組。

我已經重構了導致這個錯誤的塊,請使用這個:

Object.entries(client.verificationCodes).forEach(([key, vCode]) => {
          if (vCode.Code === args[1]) {
              let username = rbx.getUsernameFromId(vCode)
              message.member.setNickname(username)
          }
      })

這將使您的整個代碼如下所示:

const Discord = require('discord.js')
const rbx = require('noblox.js')
const fs = require("fs")
const express = require("express")
const app = express()
app.use(express.json())

const client = new Discord.Client()
client.verificationCodes = require("./codes.json")

require("dotenv").config()
const port = process.env.PORT
const serverKey = process.env.SERVER_KEY
const cookie = process.env.COOKIE

function randomString(length, chars) {
    var result = '';
    for (var i = length; i > 0; --i) result += chars[Math.floor(Math.random() * chars.length)];
    return result;
}

client.on("ready", () => {
    console.log("Client is ready.")
})

app.post("/getVerificationCode", function(req,res,next) {
    console.log("Recieved")
    if (req.body.serverKey !== serverKey) {
        console.log("Invalid serverKey supplied.")
        
        return res.status(403).json({
            error: "You do not have permission to use this."
        })
    }

    let verificationCode = randomString(4,'0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ').toUpperCase()
    const userID = parseInt(req.body.userid)
    console.log(verificationCode)

    client.verificationCodes[userID] = {
        code: verificationCode
    }

    fs.writeFile("./codes.json", JSON.stringify(client.verificationCodes,null,4), err => {
        if (err) throw err
    })

    return res.status(200).json({
        VerificationCode: verificationCode
    })
})

app.get("/*", function(req,res,next) {
    return res.status(200).json({})
})

client.on("message", (message) => {
    if (message.content.toLowerCase().startsWith("!verify")) {
      let args = message.content.split(" ")
      if (!args[1]) {
        message.reply("You must specify a code.")
        return
      }
      Object.entries(client.verificationCodes).forEach(([key, vCode]) => {
          if (vCode.Code === args[1]) {
              let username = rbx.getUsernameFromId(vCode)
              message.member.setNickname(username)
          }
      })
    }
  })

app.listen(port)
console.log(`App listening on port ${port}`)

function rbxLogin(newCookie) {

    try {
        rbx.setCookie(newCookie)
    } catch(err) {
        console.log(`Invalid cookie supplied, or expired. ${err}`)
    }


}

// rbxLogin(cookie)



client.login(process.env.BOT_TOKEN)

暫無
暫無

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

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