【问题标题】:Ajax post request seems to work except data isn't saved in the databaseAjax 发布请求似乎有效,只是数据未保存在数据库中
【发布时间】:2015-07-10 12:24:44
【问题描述】:

我正在尝试在提交表单时向 AWS postgreSQL 数据库发出 ajax 发布请求。 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;

发布请求处理程序 (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)

【问题讨论】:

  • PostgreSQL 日志文件对INSERT 语句有什么说法?如果没有条目,则命令永远不会到达服务器。

标签: javascript jquery ajax node.js postgresql


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2014-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-28
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    相关资源
    最近更新 更多