iT邦幫忙

2023 iThome 鐵人賽

DAY 26
0
Software Development

Node.js隨手札記 想到什麼就說什麼的系列 第 26

第二十六天 node.js x Sequelize x ORM 第三站

  • 分享至 

  • xImage
  •  

接續昨天~我以為migration起來之後,應該就解決了

正當我想直接打API去測試看看能不能把值存入database的時候

發現一直出現錯誤,整個弄到快瘋惹,網路上的方法每個人都不太一樣。

最後終於解決掉了,要來分享一下,希望你遇到的時候也有用

我們上上次已經建立完Model了,也成功migration進去了

這邊我在提供一下model/user.js 的程式碼

'use strict';
const {
  Model
} = require('sequelize');
module.exports = (sequelize, DataTypes) => {
  class User extends Model {
    /**
     * Helper method for defining associations.
     * This method is not a part of Sequelize lifecycle.
     * The `models/index` file will call this method automatically.
     */
    static associate(models) {
      // define association here
    }
  }
  User.init({
    firstName: DataTypes.STRING,
    lastName: DataTypes.STRING,
    email: DataTypes.STRING
  }, {
    sequelize,
    modelName: 'User',
  });
  return User;
};

接著回到我們開啟一個Controllers資料夾裡面創建一筆
dataController.js

// dataController.js

const { User } = require("../models"); 

async function createData(req, res) {
  try {
    const jsonData = req.body;//接受request

    await User.create(jsonData);//利用ORM來建立資料

    console.log("成功", jsonData);

    res.status(200).send("成功插入数据"); 
  } catch (error) {
    console.error("失敗:", error);
    res.status(500).send("失敗");
  }
}

module.exports = {
  createData,
};

我們做了一個async function 內容主要就是要打資料進去。

接著我們回到index.js

// 導入控制器
const dataController = require('./Controllers/dataController');

我們原本的程式碼是類似這樣

 製作一個post請求
 app.post("/api/data", (req, res) => {
   const jsonData = req.body; // 可以取得前端所打的request
   console.log("我們從前端得到了:", jsonData);;
   res.status(200).send("我們回給前端的response"); //最後回覆API給前端
});

但我們已經有匯入Contoller所以我們把程式碼改寫一下

app.post("/api/data", dataController.createData);

這樣就可以了!!我們終於完成第一個MVC了

當我嘗試用資料去打打看的時候就噴錯了

出現這個錯誤

總之在網路上花了好久時間才找到解決方式,可是當我解決之後,

我就沒辦法再呈現這個錯誤了,我只好趁著記憶把它記下來,提供給大家參考

因為他一直沒辦法讀取到,其實這件事讓我很困惑。

理論上我有給uesrname password database 在我認知裡面

他應該已經做到跟use_env_variable 一樣的事情了

一開始我是設定false,表示不需要,但還是錯誤,接著
我到.env裡面設定以下

DATABASE_URL_DEV = "mysql://你的root:你的密碼@localhost:3306/你的database"

並用process.env.DATABASE_URL_DEV

變成這個錯誤

接著最後改成傳入字串就可以了....

但是當我回頭想要一步一步debug的時候,發現我即使沒有加入

use_env_variable 也不會有錯誤,屬實有點尷尬,而我在練習的專案裡面

也沒加入git(跪),總之,既然這個方法解決掉這個問題,我就寫出來讓大家

參考一下了。

最後,我們修好這個問題之後再重新打一次API~

資料庫也確實進去囉


上一篇
第二十五天 node.js x Sequelize x ORM 第二站
下一篇
第二十七天 node.js x Sequelize x ORM 第四站
系列文
Node.js隨手札記 想到什麼就說什麼的30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言