【问题标题】:How can I modify my HTML file with node.js?如何使用 node.js 修改我的 HTML 文件?
【发布时间】:2020-10-31 07:29:19
【问题描述】:

require('dotenv').config()
var ComfyJS = require("comfy.js");

var firstplayer = document.getElementById("firstcharactername");

var maxPlayer = 0;
var totalAmount = 0;
var playerOne = "player1";
var playerTwo = "player2";
var playerOneScore = 0;
var playerTwoScore = 0;

var playerOneHealth = 50;
var playerTwoHealth = 50;
var playerOneTurnNumber = 1;
var playerTwoTurnNumber = 0;

function randomFunc(min, max)
{
 return Math.floor(Math.random() * max) + min;
}

ComfyJS.onCommand = ( user, command, message, flags, extra ) => {
    function rpsPicker()
    {
        var randomnumberRPS = randomFunc(1,3);
        if(randomnumberRPS === 1)
        {
            ComfyJS.Say("@" + user + " Rock");
        }
        else if(randomnumberRPS === 2)
        {
            ComfyJS.Say("@" + user + " Paper");
        }
        else if(randomnumberRPS === 3)
        {
            ComfyJS.Say("@" + user + " Scissors");
        }
    }
    function headtailPicker()
    {
        var randomnumberHeadTail = randomFunc(1,2);
        if(randomnumberHeadTail === 1)
        {
            ComfyJS.Say("@" + user + " Heads");
        }
        else
        {
            ComfyJS.Say("@" + user + " Tail");
        }
    }    
///////////////////////////////////////////////COMMANDS/////////////////////////////////////////////////
    if( command === "roll1" && user === playerOne) 
    {   
        var randomNumber1 = randomFunc(2,11);
        ComfyJS.Say("@"+user + " You've rolled two dices equals to " + randomNumber1+".");
        playerOneScore += randomNumber1;
        ComfyJS.Say("@"+user + "'s total amount is "+ playerOneScore);
    }
    else if(command === "roll2" && user === playerTwo)
    {
        var randomNumber2 = randomFunc(2,11);
        ComfyJS.Say("@"+user + " You've rolled two dices equals to " + randomNumber2+".");
        playerTwoScore += randomNumber2;
        ComfyJS.Say("@"+user + "'s total amount is "+ playerTwoScore);
    }
    else if(command === "compare")
    {
        if(playerOneScore > playerTwoScore)
        {
            ComfyJS.Say(playerOne+" won.")
        }
        else
        {
            ComfyJS.Say(playerTwo+" won.")
        }
    }

    else if (command === "joingame")
    {
        maxPlayer += 1;
        if(maxPlayer === 1)
        {
            playerOne = user;
            ComfyJS.Say("@"+user + " has joined the game " + ".");
            firstplayer.innerText = user;
        }
        else if(maxPlayer === 2)
        {
            playerTwo = user;
            ComfyJS.Say("@"+user + " has joined the game " + ".");
        }
        else if(maxPlayer > 2)
        {
            ComfyJS.Say("Max player limit!")
        }
    }

    else if(command === "resetgame" && flags.broadcaster == true)
    {
        totalAmount = 0;
        maxPlayer = 0;
        playerOne = "player1";
        playerTwo = "player2";
        playerOneScore = 0;
        playerTwoScore = 0;
    }

    else if (command === "rps")
    {
        rpsPicker();
    }

    else if (command === "flipcoin")
    {
        headtailPicker();
    }
///////////////////////////////////////////////COMBAT GAME//////////////////////////////////////////////////////
    else if( command === "attack1" && user === playerOne) 
    {   
        if (playerOneTurnNumber > 0)
        {
            var randomNumberAttack1 = randomFunc(5,12);
            ComfyJS.Say("/me " + "@"+user + " hits "+ randomNumberAttack1 + " damage to his opponent.");
            playerTwoHealth -= randomNumberAttack1;
            ComfyJS.Say("/me " + "@"+playerTwo + "'s remaining health is " + playerTwoHealth);
            playerOneTurnNumber -= 1;
        }  
        else
        {
            ComfyJS.Say("/me It's not your turn.");
        }
    }

    else if( command === "attack2" && user === playerTwo) 
    {   
        if (playerTwoTurnNumber > 0)
        {
            var randomNumberAttack2 = randomFunc(5,12);
            ComfyJS.Say("/me " + "@"+user + " hits "+ randomNumberAttack2 + " damage to his opponent.");
            playerOneHealth -= randomNumberAttack2;
            ComfyJS.Say("/me " + "@"+playerOne + "'s remaining health is " + playerOneHealth);
            playerTwoTurnNumber -= 1;
        }
        else
        {
            ComfyJS.Say("/me It's not your turn.");
        }       
    }

    else if( command === "endturn1" && user === playerOne)
    {
        ComfyJS.Say("/me " + playerOne + " ends his turn.");
        playerTwoTurnNumber += 1;
    }

    else if( command === "endturn2" && user === playerTwo)
    {
        ComfyJS.Say("/me " + playerTwo + " ends his turn.");
        playerOneTurnNumber += 1;
    }

  }




///////////////////////////////////////////WELCOMER/////////////////////////////////////////////////
ComfyJS.onJoin = ( user, self, extra ) =>
{
    console.log(user);
    ComfyJS.Say("@"+user+" Welcome!");
}
/////////////////////////////////////////////////////////////////////////////////////////////////////

ComfyJS.onChat = ( user, message, flags, self, extra ) =>
    {
        console.log( user, message, extra.userColor, flags.broadcaster);
    }



ComfyJS.Init( process.env.TWITCHUSER, process.env.OAUTH, "shiftyshifterr" );
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script src="https://cdn.jsdelivr.net/npm/comfy.js@latest/dist/comfy.min.js"></script>

    <h1>TEST GAME</h1>
    <div class="character-container">
        <div class="first-character-container">
            <p id="firstcharactername" class="first-character-name"></p>
            <img src="firstplayer.gif" alt="firstplayer">
        </div>
        <div>
            <img src="secondplayer.gif" alt="secondplayer">
            <p id="secondcharactername" class="second-character-name"></p>
        </div>    
    </div>
    <script src="app.js"></script>
</body>
</html>

我正在使用 node.js 构建一个 twitch 机器人。

但是当我尝试通过该 javascript 文件修改我的 HTML 时,我收到如下错误:

ReferenceError: the document is not defined

我已经搜索过它,发现 node.js 是服务器端的,所以我不能使用document.getElementById

但我想使用该 node.js javascript 文件修改我的 HTML 文件。

有什么方法可以做到吗?

我在这里尝试做的是,当他们键入 joingame 命令时,用户名将写入我的 HTML 文件中的 p 标签中。

我对开发还很陌生,如果我把问题搞砸了,很抱歉。

【问题讨论】:

  • 什么 HTML 文件?如果您正在编写一个 twitch bot,那么您可能会处理发送到和从聊天室发送的消息,而根本没有 HTML 的迹象。
  • 如果你想在你的服务器上做,你需要使用 fs 库读取 HTML 文件,然后像字符串一样修改它
  • 如果您可以在此处发布您正在尝试的内容以及您面临的问题(代码部分),这将很有帮助..
  • 请提供一个最小的复制示例,以便我们更好地了解您的工作
  • Pictures of code 不是很有帮助。

标签: javascript html node.js


【解决方案1】:

正如您正确识别的那样,您无法从服务器端访问文档,因为它只存在于浏览器中。如果你想在服务器端的 Node JS 上使用它,你需要parse HTML。

你需要像这样安装它

npm install --save node-html-parser

然后你就可以做类似的事情

import { parse } from 'node-html-parser';
//Some code
var document = parse(yourhtml);

【讨论】:

  • 我看到我的回答被否决了。我认为它是正确的,但很高兴看看它是否有问题,所以如果需要我可以编辑它。
  • 即使有解析,解决方案也不对,我的意思是这样看,他问的完全不是一个东西,nodeJS不是这个,即使你使用视图引擎,或者解析一个一次性可编辑的 HTML,一旦它被渲染,你就不能用 nodeJS 做任何事情。
  • @AshutoshKumar 我想告诉你一个叫做服务器端 HTML 解析的概念。由于许多可能的原因,可能需要解析 HTML 服务器端。在这些原因中,您可能会发现一些用例,例如创建以后可重用的 HTML 模板。服务器也可以解析作为 API 调用响应接收到的 HTML。您似乎没有意识到需要在服务器端解析 HTML 时存在一些完全有效的情况。我的回答描述了如何做到这一点,因为用户对 NodeJS 解析 HTML 特别感兴趣。
  • 太棒了 :) 你为我简化了...我明白了,我希望我将来能提供更多帮助 :)
  • 谢谢。愉快地提问、回答和评论。
【解决方案2】:

在这个例子中 -

const express = require('express')
const app = express()
const port = 3000

app.get('/', (req, res) => res.send('Hello World!'))

app.listen(port, () => console.log(`Example app listening at http://localhost:${port}`))

https://expressjs.com/en/starter/hello-world.html

如果您注意到 res.send - 您正在那里发送 html

如果您发布您的 nodejs sn-ps,我们可以进一步工作。

【讨论】:

  • 在问题中没有暗示他们正在使用 Express 或编写 HTTP 服务器。他们说他们正在编写一个 Twitch 机器人。
  • 这是一个为浏览器编写的 twitch bot 示例,该浏览器既可以通过节点(请参阅示例)工作,也可以在独立的浏览器上工作 - github.com/twitch-js/twitch-js#browser-iife - 没有额外的代码上下文,我们都在使用原始问题中提供的最小方向。
【解决方案3】:

document.getElementById 在运行时与您的“HTML 文档”交互。如果您需要编辑“HTML 文件”内容,您需要这样的内容:

var fs = require('fs');
 
fs.readFile('index.txt', 'utf-8', function(err, data) {
    if (err) throw err;
 
    var newValue = 'new content';
 
    fs.writeFile('index.txt', newValue, 'utf-8', function(err, data) {
        if (err) throw err;
        console.log('Done!');
    })
})

Source

【讨论】:

  • 揭开神秘选民的面纱:j
猜你喜欢
  • 1970-01-01
  • 2018-12-24
  • 2011-04-23
  • 2018-01-28
  • 1970-01-01
  • 2016-04-11
  • 1970-01-01
  • 2021-09-14
  • 1970-01-01
相关资源
最近更新 更多