如何在node js中将app.post和app.get合并为一个

时间:2019-02-01 06:24:55

标签: node.js express

我正在尝试为登录页面发布一个路由器并获取请求。

下面是我的代码:

  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');

除了app.all之外,app.get和app.post对我来说都可以正常工作。 在这里,我正在使用Express JS。 请提出建议。

5 个答案:

答案 0 :(得分:3)

我会这样做(完整的工作示例):

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!');
});

答案 1 :(得分:1)

正在吊起!

这实际上只是范围。您有一个函数表达式,而不是声明。声明被吊起,但定义却没有。因此,当您调用处理程序时,处理程序尚未定义,因为它的功能表达式在下面。

因此,除事物顺序外,无需更改代码。这样做,它将起作用

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

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

了解函数声明与表达式中的作用域

答案 2 :(得分:0)

尝试以下使用方法。它将接受所有类型的方法,您可以在其中应用条件:

app.use('/login', function (req, res, next) {
  console.log('Request Type:', req.method)
  if(req.method=="POST")
  {
    getLoginPage;
  }
  else if(req.method=="GET")
  {
    doLogin;
  }
});

答案 3 :(得分:0)

您需要在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);
    }
}

答案 4 :(得分:0)

尝试调用功能并将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);
  }
}

编辑:更改为函数声明而不是函数表达式,以避免出现问题