Как совместить app.post и app.get с одним в узле js - PullRequest
0 голосов
/ 01 февраля 2019

Я пытаюсь сделать один маршрутизатор для публикации на странице входа и получения запроса.

ниже мой код:

  app.get('/login', getLoginPage);
  app.post('/login', doLogin);

Здесь я использую app.all для объединенияи то и другое, но я не понимаю, как с этим справиться.

То, что я пробовал до сих пор.

app.all('/login', handler); 
var handler = function(req, res){
   console.log(req);
   if(req.method=="POST")
   {
   getLoginPage;
   }
   if(req.method=="GET")
   {
   doLogin
   }
}

const {getLoginPage,doLogin} = require('./controller/login');

Здесь приложение.get и app.post работают нормально для меня, за исключением app.all.Здесь я использую экспресс JS.Пожалуйста, предложите.

Ответы [ 5 ]

0 голосов
/ 01 февраля 2019

Попытка вызова функций и передачи параметров req и res этим функциям

app.all('/login', handler); 
function handler(req, res){
  if(req.method=="POST"){
    getLoginPage(req, res);
  } else if(req.method=="GET"){
    doLogin(req, res);
  }
}

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

0 голосов
/ 01 февраля 2019

ПОДЪЕМ !!!

Это действительно просто сфера.У вас есть выражение функции, а не объявление.Объявления поднимаются, а определения - нет.Поэтому, когда вы вызываете обработчик, обработчик еще не определен, так как его выражение функции находится ниже его.

Так что не нужно менять код, кроме порядка вещей.Сделайте это, и это сработает

var handler = function(req, res) {
  if (req.method == "POST") {
    console.log("POST");
  }
  if (req.method == "GET") {
    console.log("GET");
  }
};

app.all("/login", handler);

Прочитайте об областях в объявлении функции против выражения

0 голосов
/ 01 февраля 2019

Вам нужно вызвать функции в вашем app.all обработчике.

app.all('/login', handler);
var handler = function (req, res) {
    console.log(req);
    if (req.method == "POST") {
        getLoginPage(req, res);
    }
    if (req.method == "GET") {
        doLogin(req, res);
    }
}
0 голосов
/ 01 февраля 2019

Я бы сделал это так (полный рабочий пример):

var express = require('express');
var app = express();


app.route('/test')
  .get((req, res) => getLoginPage(req, res))
  .post((req, res) => doLogin(req, res))

doLogin = (req, res) => {
  res.send('doLogin');
}

getLoginPage = (req, res) => {
  res.send('getLoginPage');
}

app.listen(3000, function () {
  console.log('Example app listening on port 3000!');
});
0 голосов
/ 01 февраля 2019

Попробуйте использовать следующий метод.Он будет принимать все типы методов, и вы можете применять условия там:

app.use('/login', function (req, res, next) {
  console.log('Request Type:', req.method)
  if(req.method=="POST")
  {
    getLoginPage;
  }
  else if(req.method=="GET")
  {
    doLogin;
  }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...