我有一个NodeJS
应用,我希望使用MySQL
方法将表单中的一些数据插入到sequelize()
- 数据库的表中。
所以这是我的表格
<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'}});
}
});
}
但由于某种原因,我不知道这不起作用。任何人都可以帮助我吗?
非常感谢!!
答案 0 :(得分:2)
我不是sequelize的专家,但我发现代码容易出现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
}
})
答案 1 :(得分:1)
这是保存数据的实际查询。第2步&amp; 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
})
如果您在这里查看了续集文档: http://docs.sequelizejs.com/manual/tutorial/instances.html
保存数据有3个步骤。
之后,您可以使用.catch()
处理错误从您的后端代码中看出您的问题。确保您的模型正确无误并且表单中的数据已发送。一旦你确定,你只需要做第2步和第3步。
答案 2 :(得分:0)
您没有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>
记得使用body-parser
app.use(require("body-parser")());
现在req.body.video_url应该有预期的数据。