Как передать / использовать req.params для js-интерфейса - PullRequest
1 голос
/ 03 мая 2019

Я пытаюсь отправить req.params во внешний интерфейс и использовать его с различными функциями js, но я не знаю, как получить к нему доступ на стороне клиента с помощью js.

В частности, я пытаюсь получить req.param, называемый namespace, который пользователь вводит с помощью

app.get('/:namespace', function(req,res){
  res.render('chatLayout', { title: 'Welcome to the ' + 
  req.params.namespace +" room!"}), {namespace: req.params.namespace };

});

и затем установите переменную с именем room в js-файле на стороне клиента: var room= io.connect('http://localhost:3000/' +namespace);

Однако, поскольку я не знаю, как сделать req.params.namespace доступным для js-файла на стороне клиента, пространство имен не определено.

Примечание: я использую мопса в качестве языка шаблонов

Я пробовал несколько вещей.

  1. Попытка вызова req.params.namespace или namespace из файла js на стороне клиента, но оба выдают ошибку, сообщающую, что они не определены

  2. Создание глобальной переменной в файле pug с использованием тега script перед вызовом файла js и установка var a=namespace или var a=req.params.namespace, но это не делает эту переменную доступной для файла js. Кажется, что он должен работать как в этом вопросе Могу ли я получить доступ к переменным из другого файла? , так что, возможно, этот метод может работать, но я просто не делаю это правильно

Backend

    var express= require('express');
    var socket= require('socket.io');

    //App setup
    var app= express();
    app.set('view engine', 'pug');
    var server= app.listen(3000, function(){
    });

   //Static files
    app.get('/:namespace', function(req,res){
      res.render('chatLayout', { title: 'Welcome to the ' + 
    req.params.namespace +" room!"}), {namespace: req.params.namespace };

    });

Клиентская сторона js

   var room= io.connect('http://localhost:3000/' +namespace);

Файл мопса

    doctype html
    html(lang='en')
      head
        title= title
        meta(charset='utf-8')
        meta(name='viewport', content='width=device-width, initial-scale=1')
        <script 
    src='https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.2.0/socket.io.js'> 
   </script>
    <script src="/gameChat.js"></script>
    link(rel='stylesheet', href='/style.css')
  body
   <h1>#{title} </h1>
   <div id= "chat">
        <div id= "chat-window">
            <div id= "output"></div>
            <div id= "feedback"></div>
        </div>
        <form id ="form">
            <input id= "handle" type= "text" placeholder="Handle"/>
            <input id= "message" type = "text" placeholder="Message"/>
            <button id= "send">Send</button>
        </form>
  </div>

Ответы [ 2 ]

0 голосов
/ 04 мая 2019

Вы должны определить переменную namespace в теге head, прежде чем использовать ее (перед строкой <script src="/gameChat.js"></script>).

Просто используйте синтаксис Pug:

script.
  loginName="#{namespace}";

Полный шаблонкод:

doctype html
    html(lang='en')
      head
        title= title
        meta(charset='utf-8')
        meta(name='viewport', content='width=device-width, initial-scale=1')

        <script  src='https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.2.0/socket.io.js'></script>
        script.
          var namespace="#{namespace}";

        <script src="/gameChat.js"></script>
    link(rel='stylesheet', href='/style.css')
  body

<h1>#{title} </h1>
<div id= "chat">
    <div id= "chat-window">
        <div id= "output"></div>
        <div id= "feedback"></div>
    </div>
    <form id ="form">
        <input id= "handle" type= "text" placeholder="Handle"/>
        <input id= "message" type = "text" placeholder="Message"/>
        <button id= "send">Send</button>
    </form>
</div>

и на стороне вашего сервера вы должны отобразить шаблон chatLayout с объектом, который включает namespace данные:

app.get("/:namespace", function(req, res) {
  res.render("chatLayout", {
    title: "Welcome to the " + req.params.namespace + " room!",
    namespace: req.params.namespace
  });
});
0 голосов
/ 04 мая 2019

Вы должны отправить переменную на второй параметр res.render:

app.get('/:namespace', function(req, res) {
    res.render('chatLayout', {
        title: 'Welcome to the ' + req.params.namespace + " room!",
        namespace: req.params.namespace
    });

});

и вызвать namespace из шаблона

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...