【发布时间】: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