我正在尝试为登录页面发布一个路由器并获取请求。
下面是我的代码:
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。 请提出建议。
答案 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);
}
}
编辑:更改为函数声明而不是函数表达式,以避免出现问题