Как я могу отправить данные от клиентского конца к узлу - PullRequest
0 голосов
/ 19 марта 2020

у меня есть ae js страница выглядит как

<%- include('../blocks/header', {bot, user, path}) %>
<div class="row" style="min-width: 400px;">
  <div class="col" style="min-width: 400px;">
    <div class="card text-white mb-3" >
      <%- include('../blocks/guild-nav', {active: "manage", guild}) %>
      <table class="table table-hover">
        <thead>
          <tr>
            <th scope="col">Setting Name</th>
              <th scope="col">Current Setting</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <th scope="row" class="list-group-item d-flex justify-content-between align-items-center"
              data-toggle="tooltip" title="prefix"> Prefix<font color="red">*</font> </th>
              <td width="80%"><input type="text" class="form-control form-control-sm" style="text-align: left;"
                name="Prefix" id="Prefix" value="<%= prefix %>" placeholder="Enter prefix "></td>
          </tr>
          <tr>
            <th scope="row" class="list-group-item d-flex justify-content-between align-items-center"
              data-toggle="tooltip" title="welcomeChannelID"> welcomeChannelID </th>
              <td width="80%"><input type="text" class="form-control form-control-sm" style="text-align: left;"
                name="welcomeChannelID" id="welcomeChannelID" value="<%= welcomeChannelID %>"
                placeholder="Enter welcomeChannelID "></td>
          </tr>
          <tr>
            <th scope="row" class="list-group-item d-flex justify-content-between align-items-center"
              data-toggle="tooltip" title="logchannelID"> logchannelID </th>
              <td width="80%"><input type="text" class="form-control form-control-sm" style="text-align: left;"
                name="logchannelID" id="logchannelID" value="<%= logchannel %>" placeholder="Enter logchannelID ">
          </tr>
          <tr>
            <th scope="row" class="list-group-item d-flex justify-content-between align-items-center"
              data-toggle="tooltip" title="voicelogchannelID"> voicelogchannelID </th>
              <td width="80%"><input type="text" class="form-control form-control-sm" style="text-align: left;"
                name="voicelogchannelID" id="voicelogchannelID" value="<%= voicelogchannel %>"
                placeholder="Enter voicelogchannelID "></td>
          </tr>
          <tr>
            <th scope="row" class="list-group-item d-flex justify-content-between align-items-center"
              data-toggle="tooltip" title="defaultchannelID"> defaultchannelID</th>
              <td width="80%"><input type="text" class="form-control form-control-sm" style="text-align: left;"
                name="defaultchannelID" id="defaultchannelID" value="<%= defaultchannelID %>"
                placeholder="Enter defaultchannelID "></td>
          </tr>
          <tr>
            <th scope="row" class="list-group-item d-flex justify-content-between align-items-center"
              data-toggle="tooltip" title="guildautoroleIDt"> guildautoroleID</th>
              <td width="80%"><input type="text" class="form-control form-control-sm" style="text-align: left;"
                name="guildautoroleID" id="guildautoroleID" value="<%= guildautorole %>"
                placeholder="Enter guildautoroleID "></td>
          </tr>
          <tr>
            <th scope="row" class="list-group-item d-flex justify-content-between align-items-center"
              data-toggle="tooltip" title="playervolume"> playervolume</th>
              <td width="80%"><input type="text" class="form-control form-control-sm" style="text-align: left;"
                name="playervolume" id="playervolume" value="<%= playervolume %>" placeholder="Enter playervolume ">
          </tr>
            %>
            %>
        </tbody>
      </table>
      <div style="width: 100%; text-align: right; margin-top: 20px;">
        <a class="btn btn-danger" data-toggle="modal" data-target="#settingsResetModal" role="button">Reset Defaults
          <i class="fa fa-fw fa-cogs" aria-hidden="true"></i></a>
        <button type="submit" class="btn btn-primary" role="button">Save Changes <i class="fa fa-fw fa-save"
            aria-hidden="true"></i></button>
      </div>
    </div>
  </div>
</div>
<script type="text/javascript">
  var guildID = "<%= guild.id %>";
  let data = {
    prefix: $('#Prefix').val(),
    welcomeChannelID: $('#welcomeChannelID').val(),
    logchannelID: $('#logchannelID').val(),
    voicelogchannelID: $('#voicelogchannelID').val(),
    defaultchannelID: $('#defaultchannelID').val(),
    guildautoroleID: $('#guildautoroleID').val(),
    playervolume: $('#guildautoroleID').val(),
  }
  $('.btn-primary.btn').click(function() {
            $.ajax({
                url: `/dashboard/${guildID}/set`,
                type: "POST",
                dataType: "json",
                data: JSON.stringify(data),
                contentType: "application/json",
                cache: false,
                timeout: 5000,
                complete: function() {
                  //called when complete
                  console.log('process complete');
                },

                success: function(data) {
                  console.log(data);
                  console.log('process sucess');
               },

                error: function(e) {
                  console.log(e)
                  console.log('process error');
                },
              });
        })
</script>
<% include ../blocks/footer %>

Я пытался отправить текст на свой узел, но я получаю данные, которые я отправляю на этот сайт, а не новый fre sh отредактировано пользователем my dashboard. js Файл выглядит так: все методы, которые отправляют данные клиенту, работают, но я застрял здесь

app.get("/dashboard/:guildID/set", checkAuth, async (req, res) => {
    const guild = client.guilds.get(req.params.guildID);
    if (!guild) return res.status(404);
    const isManaged = guild && !!guild.member(req.user.id) ? guild.member(req.user.id).permissions.has("MANAGE_GUILD") : false;
    if (!isManaged && !req.session.isAdmin) res.redirect("/");

    if(welcomeChannelID !== `<#${(req.body.welcomeChannelID).replace(/[^0-9a-zA-Z_]/g, '')}>`) welcomeChannelID = `<#${(req.body.welcomeChannelID).replace(/[^0-9a-zA-Z_]/g, '')}>`
    db.collection('guilds').doc(guild.id).update({
      'prefix': req.body.prefix,
      'welcomeChannelID': welcomeChannelID.slice(2,-1) ,
      'logchannel': logchannel.slice(2,-1),
      'voicelogchannel': voicelogchannel.slice(2,-1),
      'guildautorole': guildautorole.slice(2,-1),
      'defaultchannelID':defaultchannelID.slice(2,-1),
      'playervolume': req.body.playervolume,

    })
    res.send(req.body);
    res.redirect("/dashboard/"+req.params.guildID);
  });

я удалил другой определенный var, только здесь все есть в основном коде

я что-то упустил

1 Ответ

0 голосов
/ 19 марта 2020

Проблема здесь в том, что javascript в вашем script tags выполняется только при инициализации страницы.

Это означает, что переменная data, которую вы определяете, имеет значение HTML Элементы в время выполнения сценария.

let data = {
    prefix: $('#Prefix').val(),
    welcomeChannelID: $('#welcomeChannelID').val(),
    logchannelID: $('#logchannelID').val(),
    voicelogchannelID: $('#voicelogchannelID').val(),
    defaultchannelID: $('#defaultchannelID').val(),
    guildautoroleID: $('#guildautoroleID').val(),
    playervolume: $('#guildautoroleID').val(),
  }

Таким образом, вам придется получать данные только после нажатия кнопки, например:

function getData() {
    return {
        prefix: $('#Prefix').val(),
        welcomeChannelID: $('#welcomeChannelID').val(),
        logchannelID: $('#logchannelID').val(),
        voicelogchannelID: $('#voicelogchannelID').val(),
        defaultchannelID: $('#defaultchannelID').val(),
        guildautoroleID: $('#guildautoroleID').val(),
        playervolume: $('#guildautoroleID').val(),
    }
}

$('.btn-primary.btn').click(function() {
    $.ajax({
        url: `/dashboard/${guildID}/set`,
        type: "POST",
        dataType: "json",
        data: JSON.stringify(getData()),
        ...
    } ... )
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...