使用node.js将表单数据插入到mysql数据库表中,然后按顺序执行
Insert form data into mysql database table using node.js and sequelize
我有一个NodeJS
应用程序,我想使用sequelize()
-方法将表单中的一些数据插入到MySQL
-数据库的表中。
这是我的表格
<form id="addVideo" method="post">
<input type="url" name="video_url" required></input>
<input type="hidden" value="" name="artist_id"></input>
<input type="hidden" value="youtube" name="type"></input>
</form>
我的帖子功能:
$('form#addVideo').submit(function(e){
e.preventDefault();
var form = $(this);
var jsonvideoFormData = utils.serializeToJSON(form);
var xhrData = _.pick(jsonvideoFormData, 'video_url', 'artist_id', 'type');
api.post('/videos', xhrData, function(response){
alert('Video has been added!');
});
});
然后后端代码看起来像这样:
exports.addVideo = function(req, res, next){
var videoURL = req.body.video_url;
var artistId = req.body.artist_id;
var type = req.body.type;
db.sequelize.query('INSERT INTO social_urls (artist_id,urls,type) VALUES('artistId','videoURL','type')', function(err) {
if(err){
return res.json(400, {response: {code: 400, message:'An error appeared.'}});
} else{
console.log('succes');
res.json(201, {response: {code: 201, message: 'Video has been added'}});
}
});
}
但出于某种原因,我不知道这是行不通的。有人能帮我吗?
非常感谢!!
我不是序列化方面的专家,但我看到那里的代码容易出现SQL注入。
这是错误的:
db.sequelize.query('INSERT INTO social_urls (artist_id,urls,type) VALUES('artistId','videoURL','type')', function(err)
至少应该是:
db.sequelize.query("INSERT INTO social_urls (artist_id,urls,type) VALUES('" + artistId + "','" + videoURL + "','" + type + "')'", function(err)
但实际上,我认为你应该做这样的事情:
var SocialUrl = sequelize.define('SocialUrl', {
videoURL: Sequelize.STRING,
artistId: Sequelize.STRING,
type: Sequelize.STRING
}, {
tableName: 'social_urls',
timestamps: false
});
SocialUrl
.create({
videoURL: videoURL,
artistId: artistId,
type: type
})
.complete(function(err, socialUrl) {
if (err) {
// log error;
} else {
// Do stuff
}
})
这是保存数据的实际查询。步骤2&3.
var videoURL = req.body.video_url;
var artistId = req.body.artist_id;
var type = req.body.type;
models.socialUrls.build({
artist_id: artistId,
urls: videoURL,
type: type
})
.save()
.then(anotherTask => {
console.log('the data saved!');
// you can now access the currently saved task with the variable anotherTask... nice!
})
.catch(error => {
console.log('uh oh something wasn't right!');
console.log(error);
// Ooops, do some error-handling
})
如果您在此处查看sequelize文档:http://docs.sequelizejs.com/manual/tutorial/instances.html
保存数据有三个步骤。
- 创建模型
- 创建实例,也称为回调中的数据对象。这就是发送到sequelize方法发送到数据库的内容
- 正在调用.save()方法
之后,您可以使用.catch()处理错误
从外观上看,您的问题出现在后端代码中。请确保您的模型是正确的,并且正在发送表单中的数据。一旦你确定了,你只需要做第2步和第3步。
您不必对数据进行JSON序列化。你可以发布数据。
<form id="addVideo" method="post" action="/videos">
<input type="url" name="video_url" required></input>
<input type="hidden" value="" name="artist_id"></input>
<input type="hidden" value="youtube" name="type"></input>
</form>
记住使用正文解析器
app.use(require("body-parser")());
现在req.body.video_url应该具有预期的数据。
相关文章:
- jQuery-等待此元素,然后执行1次
- 方法来查看jQuery文件是否已完全加载,然后执行与其相关的函数
- 识别javascript,然后执行“;包括“;
- 首先验证表单,然后执行 Ajax 调用
- Phantomjs 检查响应标头,然后执行某些操作
- 等待多个条件,然后执行函数
- jQuery children().fadeOut() 然后执行单个函数
- jQuery是否可以用JavaScript替换文本,然后执行
- 等待几个 ajax 调用完成,然后执行某些操作
- 执行 C# 事件处理程序,然后执行该 js 函数
- JavaScript循环等待一些函数返回,然后执行下一个循环
- AG-Grid 将列标题设置为复选框,然后执行全选或取消全选列,而不是仅组
- 重新加载仅包含脚本的 DIV,然后执行脚本
- 等待几秒钟,让下载完成,然后执行PHP代码
- 使用JQuery在元素中查找文本,然后执行函数
- jQuery:检查元素是否有类,然后执行函数
- Node.js:执行多个异步操作的最佳方式,然后执行其他操作
- 将页面重定向到另一个页面,然后执行jQuery操作
- 检查是否选中任何单选按钮,然后执行代码(多组按钮)
- 加载页面,然后执行javascript