简体   繁体   English

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

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

I'm trying to do an ajax post request to an AWS postgreSQL database on submitting a form. 我正在尝试在提交表单时向AWS postgreSQL数据库发出ajax发布请求。 The jquery script seems to correctly extracts data from the form, creates a data object, and queries the database. jQuery脚本似乎可以正确地从表单中提取数据,创建数据对象并查询数据库。 But when I connect to the AWS instance via psql and run SELECT * FROM "Users"; 但是当我通过psql连接到AWS实例并运行SELECT * FROM "Users"; , the table is empty. ,表格为空。 Confusingly, I have other tables running essentially the same code and the requests correctly post data to the database. 令人困惑的是,我还有其他一些基本运行相同代码的表,并且请求正确地将数据发布到了数据库中。

the HTML/jade (addUser.jade) 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 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;

the post request handler (user.js) 帖子请求处理程序(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 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;

What happens in console when I submit the form 提交表单时控制台中会发生什么

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

Output from psql query psql查询的输出

dbname=> SELECT * FROM "Users";

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

So I am using sequelize as the Node.js ORM for postgreSQL. 所以我正在使用sequelize作为PostgreSQL的Node.js ORM。 I changed the name of a field in the User schema but the User table in the database was using the old name when I sent the POST request, so sequelize couldn't recognize the field. 我更改了User架构中的字段名称,但发送POST请求时数据库中的User表使用旧名称,因此sequelize无法识别该字段。 I had to drop the table and restart the app in order to recreate the table with the new name. 我必须删除表并重新启动应用程序,以便使用新名称重新创建表。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM