2017-11-25 32 views
0

有時,我需要將角度前端應用的空值傳遞給我的後端(節點+ mysql)。我的列表內容可以是NULL。我試圖使用:NULL,'NULL'或空(''),但在所有情況下,我有一個在服務器端的異常,因爲mysql拋出一個無效的列值。 錯誤是:如何使用mysql將列的NULL值從角度傳遞給節點

code: 'ER_TRUNCATED_WRONG_VALUE', errno: 1292, 
sqlMessage: 'Incorrect datetime value: \'\' for column \'DATE_CHECK\' at row 1', 
sqlState: '22007', 

我怎麼能這樣做呢?

//角前端控制器

var saveItem=async function(row){ 
     var item={} 
     try{ 
      item.ID=row.ID; 
      item.DATE_CHECK=row.DATE_CHECK?moment(row.DATE_CHECK).format('YYYY-MM-DD'):''; 
      await $http.post('/agenda_staff/' + item.ID, item) 
     } catch(erro){ 
      console.log(erro) 
     } 
} 

//節點服務器

router.post('/:id',async (req,res,next)=>{ 
    var input = JSON.parse(JSON.stringify(req.body)); 
    var id = req.params.id; 
    try { 
     const connection = await pool.getConnection(); 
     try { 
      var data = { 
       ID: input.ID 
      , DATE_CHECK: input.DATE_CHECK 
      }; 

      var query=await connection.query("UPDATE AGENDA_STAFF set ? WHERE id = ? ",[data,id]) 
      var ret={success:true, message:'Registro foi atualizado'} 
      return res.send(ret); 
     } finally { 
      pool.releaseConnection(connection); 
     } 
    } catch (err) { 
     if (err instanceof Errors.NotFound) 
      return res.status(HttpStatus.NOT_FOUND).send({ success:false, message: err.message, results:err.stack }); // 404 
     console.log(err); 
     return res.status(HttpStatus.INTERNAL_SERVER_ERROR).send({ success:false,message: err.message, results:err.stack }); // 500 
    } 
}); 

//表DEF

CREATE TABLE AGENDA_STAFF (
    ID BIGINT AUTO_INCREMENT NOT NULL 
    , DATE_CHECK    TIMESTAMP 
    ,CONSTRAINT PK_STAFF 
     PRIMARY KEY (ID) 
)ENGINE=INNODB; 

回答

1

作爲文檔說:undefined/null are converted to NULL,不像串'null'或空字符串''。所以更改node server內部的代碼。

var data = { 
    ID: input.ID, 
    DATE_CHECK: input.DATE_CHECK === '' ? null : input.DATE_CHECK 
};