Ajax post请求似乎可以工作,只是数据没有保存在数据库中

Ajax post request seems to work except data isn't saved in the database

本文关键字:数据 保存 数据库 存在 请求 post 工作 Ajax      更新时间:2023-09-26

我试图做一个ajax post请求到一个AWS postgreSQL数据库提交表单。jquery脚本似乎可以正确地从表单中提取数据、创建数据对象并查询数据库。但是,当我通过psql连接到AWS实例并运行SELECT * FROM "Users";时,表为空。令人困惑的是,我有其他表运行本质上相同的代码和请求正确地将数据发送到数据库。

HTML/jade (addUser.jade)

extends layout
block content
    #page-wrapper
         .container
             h2 Add a User
             br
             form(id='addUserForm')
                .form-group
                    label(for='givenName') First Name
                    input(type='text', class='form-control', id='givenName')
                .form-group
                    label(for='surName') Last Name
                    input(type='text', class='form-control', id='surName') 
                .form-group
                    label(for='phoneNumber') Phone Number
                    input(type='text', class='form-control', id='phoneNumber')
                .form-group
                    label(for='email') Email
                    input(type='email', class='form-control', id='email')
                .form-group
                    label(for='address') Address
                    input(type='text', class='form-control', id='address')
                h5 
                    strong Notes
                textarea(id='notes' type='text' class='form-control', rows='5')
                br    
                button(type='submit', class='btn btn-default') Submit
    script.
        $(document).ready(function() {
             $('#addUserForm').submit(function(event) {
                event.preventDefault();
                var givenName = $('input[id="givenName"]').val();
                var surName = $('input[id="surName"]').val();
                var phoneNumber = $('input[id="phoneNumber"]').val();
                var email = $('input[id="email"]').val();
                var address = $('input[id="address"]').val();
                var notes = $('textarea[id="notes"]').val();
                $.ajax({
                    type: 'POST',
                    contentType: 'application/x-www-form-urlencoded; charset=utf-8',
                    url: '/api/users/',
                    data: {
                        givenName: givenName,
                        surName: surName,
                        phoneNumber: phoneNumber,
                        email: email,
                        address: address,
                        notes: notes
                    },
                    success: function() {
                        console.log('Posted user ' + givenName + ' ' + surName + ' to the db.');
                    }
                });
                $('#addUserForm').trigger('reset');
             });
        });

addUser.js

var models = require('../models');
var express = require('express');
var router = express.Router();
router.get('/', function(req, res, next) {
    res.render('addUser', { user: req.user.givenName }); 
});
module.exports = router;

post request handler (user.js)

var express = require('express');
var router = express.Router();
var User = require('../models').sequelize.models.User;
router.post('/', function(req, res) {
    return User.create({
        givenName: req.body.givenName,
        surName: req.body.surName,
        phoneNumber: req.body.phoneNumber,
        email: req.body.email,
        ownerId: req.user.customData._id,
        notes: req.body.notes
    }, {
        returning: true
    })
    .then(function(user) {
        res.send(user);
    })
    .catch(function(err) {
        res.send(err);
    });;
});

app.js

var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
// include routes
var mainPage = require('./routes/mainPage');
var addUser = require('./routes/addUser');
var users = require('./routes/user');
var app = express();
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
app.use(favicon(__dirname + '/public/favicon.ico'));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, '/public')));
// routes
app.use('/', mainPage);
app.use('/addUser', addUser);
app.use('/api/users', users);
// catch 404 and forward to error handler
app.use(function(req, res, next) {
  var err = new Error('Not Found');
  err.status = 404;
  next(err);
});
module.exports = app;

当我提交表单

时控制台会发生什么?

Executing (default): INSERT INTO "Users" ("id","givenName","surName","phoneNumber","email","ownerId","notes","updatedAt","createdAt") VALUES (DEFAULT,'Gandalf','Grey','911','gmail@yahoo.com','6lZinEZNK4n0G60tW21EvE','lorem ipsum dolor','2015-07-07 20:38:45.096 +00:00','2015-07-07 20:38:45.096 +00:00') RETURNING *;

POST /api/users/ 200 2945.195 ms - 1488

psql查询的输出

dbname=> SELECT * FROM "Users";

id | givenName | surName | phoneNumber | email | ownerId | notes | createdAt | updatedAt ----+-----------+---------+-------------+-------+---------+-------+-----------+----------- (0 rows)

所以我使用sequelize作为postgreSQL的Node.js ORM。我在User模式中更改了一个字段的名称,但是当我发送POST请求时,数据库中的User表使用的是旧名称,因此sequelize无法识别该字段。为了用新名称重新创建表,我必须删除表并重新启动应用程序。