Как бороться с параметром маршрута? - PullRequest
0 голосов
/ 23 мая 2019

Я настроил несколько маршрутов:

var express = require('express');
var router = express.Router();

router.post('/isAccessible/:orgaId', function(req, res, next) {
    res.send("------ param = "+orgaId);
});

module.exports = router;

Затем внутри файла ejs:

<script>
  function isOrganisationAccessible(orgaId) {
    $.ajax({
      url: "/organisation/isAccessible/"+orgaId,
      type: "POST",
      dataType: "text",
      success : function(data, status, xhr) {
        return data;
      },
      error : function(xhr, status, error) {
        return "";
      }
    });
  }
  $(document).ready(function() {
    alert("test = "+isOrganisationAccessible("xxx"));
  });
</script>

Во время выполнения я получаю undefined!Так как же получить параметр, переданный на маршрут?

Ответы [ 2 ]

1 голос
/ 23 мая 2019

Похоже, проблема в том, что isOrganisationAccessible является асинхронным.Возврат данных из функции success не дает ожидаемого результата, поскольку данные не возвращаются из isOrganisationAccessible, а только из функции success.isOrganisationAccessible всегда будет возвращать undefined.

Вы можете решить эту проблему, используя обещание:

function isOrganisationAccessible(orgaId) {
  return new Promise((resolve, reject) => {
    $.ajax({
      url: "/organisation/isAccessible/"+orgaId,
      type: "POST",
      dataType: "text",
      success : function(data, status, xhr) {
        resolve(data);
      },
      error : function(xhr, status, error) {
        reject(error);
      }
    });
  })
}

Затем разрешите обещание, чтобы проверить результат:

$(document).ready(function() {
  isOrganisationAccessible("xxx").then((data) => {
    alert(data)
  })
})
1 голос
/ 23 мая 2019

Вы не можете получить доступ к orgaId напрямую.Вам нужно получить к нему доступ следующим образом:

req.params.orgaId 

обновление: я протестировал это простое приложение, и оно нормально работает на / isAccessible / abc, которое я протестировал с запросом get, но с post также все должно быть в порядке.Кроме того, почему вы используете почту, когда вы не отправляете какие-либо данные?

const express = require('express');  

let app = express();  

// Function to handle the root path
app.get('/isAccessible/:orgaId', function(req, res, next) {
    res.send("------ param = "+req.params.orgaId);
});

let server = app.listen(3000, function() {  
    console.log('Server is listening on port 3000')
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...