【问题标题】:building a NodeJs Express Router structure with Ajax POST使用 Ajax POST 构建 NodeJs Express Router 结构
【发布时间】:2018-01-09 13:26:34
【问题描述】:

我想在我的项目中使用 Express 路由器。我创建了我的app.js(我的视图引擎是 Handlebars)

const path = require('path');
const express = require('express');
const bodyParser = require('body-parser');

const app = express();

app.use(express.static(path.join(__dirname, 'public')));

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: false}));

require('./server/router')(app); // start with the routing

app.listen(8888);

然后前往我的router.js 处理所有路由文件

module.exports = function(app){
    var router = require('express').Router();

    app.use('/login', require('./routes/login'));
    app.use('/route2', require('./routes/route2'));
    app.use('/route3', require('./routes/route3'));

    router.post('/logout', function (req, res) { 
        var session = req.session;
        session.destroy();
        res.send({});
    });
};

我的登录路径处理两个任务:

  • 路线本身
  • Ajax 调用“validateLogin”

.

var router = require('express').Router(); // I set this on each route

router.get('/', function (req, res) { // render the HTML template
         res.render('login');
    });


router.post('/validateLogin', function (req, res) { // user login - AJAX

    var loginIsValid = true; // TEST // req.body.username && req.body.password
    res.send({
          isValid: loginIsValid
    });
});

module.exports = router; // export this module

客户端有一个简单的登录表单。当按下登录按钮时,我执行这个 Ajax 调用

function login() {
    $.ajax({
        type: 'POST',
        url: 'validateLogin',
        contentType: 'application/json',
        data: JSON.stringify({
            username: "Foo",
            password: "Bar"
        })
    }).done(function (response) {
        if (response.isValid) { // Redirect the user to the next page
            $(location).attr('href', 'next page');
        }
    }).fail(function () {

    });
}

此 Ajax 调用失败,因为找不到 POST 路由

POST http://localhost:8888/validateLogin 404(未找到)

即使使用

url: '/validateLogin',

不起作用。

有什么遗漏或错误?我的结构好吗?

我从

获取信息

http://expressjs.com/en/guide/routing.html

【问题讨论】:

  • 试试url: '/validateLogin',
  • 不,那没用

标签: javascript node.js ajax


【解决方案1】:

假设所有其他设置正确,根据您的代码设置,您要访问的网址似乎实际上位于/login/validateLogin

【讨论】:

  • 是的,我认为我的路径可能是相对的。我总是要写'/route/name' ?
  • 我不是 100% 确定,但这可能是 Jquery Ajax 或特别是 express 的一个怪癖。这真的取决于几个因素,我建议调查一下。不过,试试./name../name 看看是否可行。
猜你喜欢
  • 1970-01-01
  • 2015-11-18
  • 2019-01-19
  • 2017-07-30
  • 1970-01-01
  • 1970-01-01
  • 2018-06-11
  • 2021-09-10
  • 2016-03-12
相关资源
最近更新 更多