【问题标题】:Node js express static not receiving post response on the client sideNode js express static没有在客户端接收到post响应
【发布时间】:2017-07-08 11:19:26
【问题描述】:

大家好,我来自移动开发,想了解更多关于 node js 运行时的信息,所以我已经有一个简单的“app”js 客户端,我正在尝试将它与 node js express 服务器一起使用.

出于我的目的,我使用了一个静态文件,因为我所有的 html 都是由带有 DOM 的 js 生成的。

问题:

当我使用 ajax 在数据库中存储值时,它总是将我重定向到 index.html,并且不执行我的客户端回调代码来创建表。

app.js

let express = require('express');
let path = require('path');
let favicon = require('serve-favicon');
let logger = require('morgan');
let cookieParser = require('cookie-parser');
let bodyParser = require('body-parser');

let index = require('./routes/index');
let cups = require('./routes/route-cup');
let leagues = require('./routes/route-league');
let players = require('./routes/route-player');
let teams = require('./routes/route-team');

let app = express();

app.use(favicon(path.join(__dirname, 'public', '/images/favicon.png')));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: true}));
app.use(cookieParser());


app.use('/cups', cups);
app.use('/leagues', leagues);
app.use('/players', players);
app.use('/teams', teams);
app.use(express.static("public", {
    "index": "index.html"
}));

// catch 404 and forward to error handler
app.use(function (req, res, next) {
    var err = new Error('Not Found');
    err.status = 404;
    next(err);
});

// error handler
app.use(function (err, req, res, next) {
    // set locals, only providing error in development
    res.locals.message = err.message;
    res.locals.error = req.app.get('env') === 'development' ? err : {};

    // render the error page
    res.status(err.status || 500);
    res.render('error');
});

module.exports = app;

路线:

let express = require('express');
let router = express.Router();
let mysql = require("mysql");
let executeSql = require("../scripts/execute-sql");

router.get('/', function (req, res, next) {
    executeSql.executeSelect(res, function (rows, fields) {
        res.json(rows);
    }, "SELECT * FROM `footTour-sgbd`.player;")
});

router.post('/submit-player', function (req, res, next) {
    let obj = req.body;
    let keys = Object.keys(obj);
    let placeHolders = new Array(keys.length).fill("?");
    let values = Object.keys(obj).map(key => obj[key]);
    let sql = "INSERT INTO `footTour-sgbd`.`player` (" + keys.toString() + ") VALUES (" + placeHolders.toString() + ")";

    sql = mysql.format(sql, values);
    executeSql.executeSelect(res, function (rows, fields) {
        // res.json(rows);
        res.end('{"success" : "Updated Successfully", "status" : 200}');

    }, sql);
});

module.exports = router;

js 客户端请求:

 let formPlayer = createForm(formName, formName);
    formPlayer.addEventListener("submit", function (response) {

        let playerName = document.getElementById("name").value;
        let playerHeight = document.getElementById("height").value;
        let playerBirthdate = document.getElementById("birthDate").value;
        let playerCountry = document.getElementById("countryEnum").value;
        let playerPosition = document.getElementById("positionTypeEnum").value;

        // let player = formToJson(formPlayer);
        let player = new Player(playerName, playerBirthdate, playerCountry, playerHeight, playerPosition)
        insertPlayer(
            function (response) {
                createPlayersTable();

            }, function (status, response) {

                showSnackBar(`Error creating player (${status})`, 3000);
                createPlayersTable();
            }, player);
    });

function insertPlayer(onSuccess, onError, data) {

    ajaxHelper("/players/submit-player", onSuccess, onError, "POST", data);
}

function ajaxHelper(url, onSuccess, onError, verb, data) {
    verb = verb || "GET";
    let xhr = new XMLHttpRequest();
    xhr.open(verb, url);
    xhr.responseType = "json";
    xhr.addEventListener("load", function () {
        if (this.status === 200) {
            onSuccess && onSuccess(xhr.response);
        } else {
            onError && onError(this.status, xhr.response);
        }
    });
    if (data) {
        xhr.setRequestHeader("Content-Type", "application/json;charset=UTF-8");
        xhr.send(JSON.stringify(data));
    } else {
        xhr.send();
    }
}

【问题讨论】:

    标签: javascript node.js ajax express post


    【解决方案1】:

    尝试在 EventListener 表单中添加 preventDefault():

    formPlayer.addEventListener("submit", function (evt) {
        evt.preventDefault(); //<-- THIS
    
        let playerName = document.getElementById("name").value;
        let playerHeight = document.getElementById("height").value;
        let playerBirthdate = document.getElementById("birthDate").value;
        let playerCountry = document.getElementById("countryEnum").value;
        let playerPosition = document.getElementById("positionTypeEnum").value;
    
        // let player = formToJson(formPlayer);
        let player = new Player(playerName, playerBirthdate, playerCountry, playerHeight, playerPosition)
        insertPlayer(
            function (response) {
                createPlayersTable();
    
            }, function (status, response) {
    
                showSnackBar(`Error creating player (${status})`, 3000);
                createPlayersTable();
            }, player);
    });
    

    【讨论】:

    • 非常感谢,如果你来里斯本,我拥有一杯咖啡,在这里给我发个信息,我会偿还我的债务;)
    • 啊哈哈好吧..!! :D
    猜你喜欢
    • 2014-05-10
    • 1970-01-01
    • 2012-11-20
    • 2015-10-12
    • 2021-08-04
    • 1970-01-01
    • 1970-01-01
    • 2017-03-29
    • 1970-01-01
    相关资源
    最近更新 更多