2026年5月19日 星期二

for next.js 16,開發環境中:為什麼訪問api可以,但訪問「/」就整台機器給你掛掉

為了怕日後又重複遇到這個現象,所以做這筆記... 

在學習專案中先以一個route.ts測試db部分
------src/app/api/test/route.ts------------

import db from '@/lib/db';
import { NextResponse } from 'next/server';
export async function GET(){
    try{
         const result=await db('books').count(' * as total').first();
         return NextResponse.json({
                success:true,
                totalBooks:result?.total
            });
    }catch(error){
            return NextResponse.json({
                    success:false,
                    error:String(error)
                },{
                    status:500
                });
    }
}

--------------------------------------------
在terminal用"npm run dev" 起來要查看個api  (url : http://localhost3000/api/test)時
系統會出現一堆package沒安裝的訊息,這時,別傻傻地一個一個安裝(因為knex 依賴的套件如果沒有特別指定.會是所有的db都來一份的)
此時請到「next.config.ts」設定,因為我們這次用了knex操作postgresql,所以在serverExternalPackages中,加上「knex、pg」套件
--------------

import type { NextConfig } from "next";
const nextConfig: NextConfig = {
  /* config options here */
 serverExternalPackages: ['knex', 'pg', 'jsonwebtoken', 'bcryptjs'],
};
export default nextConfig;

---------------

總該可以測了吧,是的,你可以看到api如期工作








現在,我們要回去幹正事了--回頭查看一下localhot:3000/
結果terminal一直在compiling....






然後系統就整個給你關機罷工去了!!! (連個error都不response.....)
雖然說「佛跳牆弄到爆炸是不允許的,應該要踢你出局,不過念在你有創意夠噱頭,還有2 分鐘再做一個吧!」,架構再怎麼好,會雄雄讓人怎麼死的都不知道是不行的

為什麼會這樣!?
因為最初那個test的route.ts比較小,一下子就compile  (webpack)完成可用了
但是request「/」時,"如果沒有指定的話"是整個網站都compile
「那...我只想要compile需要的頁面的話,要如何指定?」
請到「package.json」做以下的修改
----





----

即,把script--> "dev":"next dev "改為"dev":"next dev --turbo"
存檔,就可以解決這個問題了

一起加油吧

0 個意見:

張貼留言

訂閱 張貼留言 [Atom]

<< 首頁