【问题标题】:How to insert express js | Node js values into the database [duplicate]如何插入快递js |节点js值进入数据库[重复]
【发布时间】:2017-01-19 14:36:36
【问题描述】:

我有以下代码包含图像上传和处理输入文本。我必须将此值插入 mysql 数据库。我无法将多个值插入数据库。但我什至可以单行值...

我可以插入这个回复

{"name":"As","age":"12","imagePic":["userPic-1473665739434.jpeg"]}

我无法插入此回复

{"name":["As","bs"],"age":["12","13"],"imagePic":["userPic-1473663782550.jpeg","userPic-1473663782628.jpeg"]}

var express = require('express');
var multer  =   require('multer');
var mime    =   require('mime');
var mysql = require('mysql');
var app = express();
var bodyParser =    require("body-parser");
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());

var connection = mysql.createConnection({
  host     : 'localhost',
  user     : 'root',
  port      : 3306,
  password : '',
  database : 'test'
});

connection.connect(function(err){
if(!err) {
    console.log("Database is connected ... nn");    
} else {
    console.log("Error connecting database ... nn");    
}
});

var storage =   multer.diskStorage({
  destination: function (req, file, callback) {
    callback(null, './uploads');
  },
  filename: function (req, file, callback) {
    callback(null, file.fieldname + '-' + Date.now() + '.' + mime.extension(file.mimetype));
  }
});
var upload = multer({ storage : storage }).array('userPic');

app.get('/completeForm.html', function(req, res){
    res.sendFile(__dirname + '/' + 'completeForm.html')
});

app.post("/postFormAct", function (req, res, next) {
    upload(req,res,function(err) {
        /*console.log(req.body.user);
        console.log(req.body.email);
        console.log(req.files);*/
        var imgName = [];
        for(var i=0; i<req.files.length; i++) {
            imgName[i] = req.files[i].filename;
        }
        response = {
        name : req.body.user, 
        age : req.body.email, 
        imagePic : imgName
        };
        // res.send(JSON.stringify(response)); sample response eg: {"name":["As","bs"],"age":["12","13"],"imagePic":["userPic-1473663782550.jpeg","userPic-1473663782628.jpeg"]}
        if(!err) {

            connection.query('INSERT INTO nodetable SET ?',[response], function(err, result){
                if(!err) {
                res.send(response);
                }
                else{
                throw err;
                }
            });
        } 
        else {
            throw err;
        } 

    });

});

app.listen(3000);

下面给出的HTML代码

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<form method="post" action="/postFormAct" enctype="multipart/form-data">
    <input type="text" name="user"><br>
    <input type="text" name="email"><br>
    <input type="file" name="userPic"><br>
    <div id="appendMore"></div>
    <input type="submit" value="Submit"><input type="button" value="Add More Fields" id="clickBtn">
</form>
<script>
    $(document).ready(function() {
    $("#clickBtn").click(function(){
        $("#appendMore").append('<input type="text" name="user"><br><input type="text" name="email"><br><input type="file" name="userPic"><br>');   
    });
    });
</script>

数据库结构如下图

请大家帮忙...

【问题讨论】:

  • 如何拆分 {"name":["As","bs"],"age":["12","13"],"imagePic":["userPic-1473663782550. jpeg","userPic-1473663782628.jpeg"]} 转换为这种格式 ['As', '12', 'userPic-1473663782550.jpeg'],
  • 好的,我已经发布了一个解决方案。看看这是否适合你。
  • 尝试另一个答案。它应该适合你。我正在删除我的。

标签: javascript mysql node.js express


【解决方案1】:

首先,对于批量 MySQL 插入,请使用此语法(这里也有说明 How do I do a bulk insert in mySQL using node.js):

var myResponse = [
     ["As", "12", "userPic-1473663782550.jpeg" ],
     ["Bs", "13", "userPic-1473663782628.jpeg"]
];


connection.query('INSERT INTO nodetable (name, age, imagePic) VALUES ?',
                 [myResponse], function(err, result)
{
   if (!err) { res.send(myResponse); }
   else { throw err; }           
});

像这样将它硬编码到 index.js 中 - 当我现在用你的文件和数据库结构测试它时,它应该可以工作。

对于重组(仅在硬编码时继续):

var original = {
    "name":["As","bs"],
    "age":["12","13"],
    "imagePic":["userPic-1473663782550.jpeg","userPic-1473663782628.jpeg"]
};

var myResponse =  [
    ["As", "12", "userPic-1473663782550.jpeg" ],
    ["Bs", "13", "userPic-1473663782628.jpeg"]
];

你可以这样做:

var myResponse = [];
for (var i = 0; i < original.name.length; i++) {
    myResponse.push([
        original.name[i],
        original.age[i],
        original.imagePic[i]
    ]);
}

【讨论】:

  • 谢谢迈克尔先生。它工作正常。我怀疑没有推送操作我们不能插入多个响应?是否可以尽快回复
  • 我不认为您可以将数据插入数据库而不以某种方式对其进行重组。当然,您也可以在客户端创建所需的结构,但无论如何您都需要检查后端的所有内容。如果它解决了您的问题 - 您能否将我的答案标记为已接受?
  • 还没有 :) 请在此处注意如何标记和支持答案:meta.stackexchange.com/questions/5234/…
猜你喜欢
  • 2016-07-16
  • 2019-12-23
  • 2021-11-12
  • 2017-04-11
  • 2021-07-02
  • 2015-05-14
  • 1970-01-01
  • 1970-01-01
  • 2015-12-31
相关资源
最近更新 更多