如何在Netlify函数中使用ES模块

在存储库的根级package.json文件中添加: "type": "module", 现在,不再使用: exports.handler = async (event, context, callback) => { } 而是使用: export async function handler(event, context) { } 而且,任何时候使用: callback(null, { statusCode: 200, body: html, }) 现在使用: return { statusCode: 200, body: html, }

如何在Next.js中強制重新加載頁面

在組件中,您可以使用useRouter鉤子: import { useRouter } from 'next/router' //... const router = useRouter() router.reload(window.location.pathname) 有時無法使用此方法,例如在非React組件中,例如在實用函數中。在這種情況下,您可以這樣做: import Router from 'next/router' Router.reload(window.location.pathname)

如何在Next.js中運行構建時執行腳本

我試圖看看將我的基於Hugo的博客移植到Next.js是否是一個好的選擇(這並不是)。在這個過程中,我遇到了一個問題。 我需要更改每個圖片的路徑,因為Hugo允許一個帖子與Markdown文件位於同一個文件夾中,而Next.js則不允許這樣做。 但是,我不想打亂我的工作流程。能夠將圖片放在與Markdown文件相同的文件夾中對於編寫和維護都非常方便。 所以我的計劃是:在構建時,我會遍歷所有帖子,收集圖片,並在/public/images中為每個帖子創建一個文件夾。 我只需要更改Markdown中的每個圖片路徑,這是最簡單的部分。 然後,我需要運行一個構建後的命令,創建一個postbuild.mjs文件,其工作是遍歷我的content/posts文件夾,並將每個圖片複製到public/images中: import fs from 'fs' import path from 'path' import fsExtra from 'fs-extra' const source = './content/posts' const destination = './public/images' const posts = fs.readdirSync(source) fsExtra.emptyDirSync(destination) fs.mkdir(destination, () => { posts.map((slug) => { if (slug === '.DS_Store') return fs.mkdir(`${destination}/${slug}`, () => { fs.readdirSync(`${source}/${slug}`) .filter((item) => ['.png', '.jpg', '.jpeg', '.gif'].includes(path.extname(item)) ) .map((item) => { fs.copyFile( `${source}/${slug}/${item}`, `${destination}/${slug}/${item.replace(/ /g, '-')}`, () => { console.log(`${destination}/${slug}/${item}`) } ) }) }) }) }) 然後,在package....

如何在Node.js中使用import

如果您正在使用Node.js,並希望停止使用require(),改用ES模塊的import語法,則需要進行以下操作。 在package.json文件中添加"type": "module",如下所示: { "name": "projectname", "version": "1.0.0", ...剩餘的文件內容 } 改為: { "name": "projectname", "type": "module", "version": "1.0.0", ...剩餘的文件內容 } 就這樣! 現在您可以使用import來引入模塊,例如: import fs from 'fs'

如何在Node.js中使用MongoDB

在本教程中,我將向您展示如何從Node.js與MongoDB數據庫進行互動。 如果您對MongoDB不熟悉,請查閱我們的基礎指南,以及如何安裝和使用它的指南:) 我們將使用官方的mongodb npm套件。如果您已經有一個正在進行中的Node.js項目,可以使用以下命令來安裝它: npm install mongodb 如果您從頭開始,請在終端中創建一個新的文件夾,然後運行npm init -y來啟動新的Node.js項目,然後運行npm install mongodb命令。 連接到MongoDB 您需要引入mongodb套件,然後從中獲取MongoClient對象。 const mongo = require('mongodb').MongoClient 創建MongoDB服務器的URL。如果您在本地使用MongoDB,URL將是類似mongodb://localhost:27017的形式,因為27017是默認端口。 const url = 'mongodb://localhost:27017' 然後使用mongo.connect()方法來獲取對MongoDB實例客戶端的引用。 mongo.connect(url, { useNewUrlParser: true, useUnifiedTopology: true }, (err, client) => { if (err) { console.error(err) return } // ... }) 現在,您可以使用client.db()方法選擇數據庫。 const db = client.db('kennel') 創建並獲取集合 您可以使用db.collection()方法獲取集合。如果集合還不存在,它將被創建。 const collection = db.collection('dogs') 向集合插入數據 在app.js中添加以下函數,它使用insertOne()方法將一個對象添加到dogs集合中。 collection.insertOne({name: 'Roger'}, (err, result) => { }) 您可以使用insertMany()來添加多個項目,將數組作為第一個參數傳入。 collection.insertMany([{name: 'Togo'}, {name: 'Syd'}], (err, result) => { }) 查找所有文檔 使用集合上的find()方法來獲取添加到集合中的所有文檔。...

如何在Node.js中將JSON物件寫入檔案

了解如何在Node.js中將JSON物件儲存到檔案中,並在之後檢索它。 有時,在Node.js應用程式中,將資料儲存到檔案系統中是最好的方法。 如果您有一個可以序列化為JSON的物件,您可以使用JSON.stringify()方法和fs模組的fs.writeFileSync()方法,它同步將資料寫入檔案中: const fs = require('fs'); const storeData = (data, path) => { try { fs.writeFileSync(path, JSON.stringify(data)); } catch (err) { console.error(err); } }; 要檢索資料,可以使用fs.readFileSync()方法: const loadData = (path) => { try { return fs.readFileSync(path, 'utf8'); } catch (err) { console.error(err); return false; } }; 我們使用了同步的API,所以一旦獲取資料,就可以輕鬆地返回它。 您也可以選擇使用非同步版本的fs.writeFile和fs.readFile,雖然程式碼會有些變化,我建議您參考如何使用Node.js寫入檔案和如何使用Node.js讀取檔案來了解更多資訊。

如何在Node.js中檢查文件是否存在

如何使用Node.js的fs模塊來檢查文件系統中是否存在文件。 使用Node.js檢查文件是否存在的方法是使用fs.existsSync()方法: const fs = require('fs') const path = './file.txt' try { if (fs.existsSync(path)) { //文件存在 } } catch(err) { console.error(err) } 這種方法是同步的,意味著它是阻塞的。為了以異步的方式檢查文件是否存在,可以使用fs.access()方法,該方法檢查文件的存在性而不需要打開它: const fs = require('fs') const path = './file.txt' fs.access(path, fs.F_OK, (err) => { if (err) { console.error(err) return } //文件存在 })

如何在Node.js中獲取文件擴展名

我需要找到文件的擴展名。 我有文件的名稱,我想獲取它的擴展名(.jpg,.png…)。 為了做到這一點,您可以使用path內置模塊及其extname()方法: const path = require('path') path.extname('picture.png') //.png path.extname('picture.of.a.dog.png') //.png path.extname('picture.of.a.dog.jpg') //.jpg path.extname('picture.of.a.dog.jpeg') //.jpeg

如何在Node中列出文件夹中的文件

你想要如何在Node.js中获取一个包含文件夹中文件列表的数组呢? 首先导入内置模块fs,然后调用fs.readdirSync()传入你想要读取的文件夹名: import fs from 'fs' const filenames = fs.readdirSync('content') 你可以使用相对或绝对路径。 然后可以通过以下方式遍历文件名: filenames.map((filename) => { console.log(filename) })

如何在Node中記錄物件

在瀏覽器中運行的JavaScript程式中,當您輸入console.log()時,會在瀏覽器控制台中產生一條輸出: 點擊箭頭後,輸出會展開,您可以清楚地看到物件的屬性: 在Node中,情況是一樣的。 當我們將物件輸出到控制台時,並沒有像在瀏覽器中那樣的便利。在手動運行Node程式時,或者在日誌文件中,輸出會是物件的字串表示。 一切都很好,直到達到某個層次的巢狀結構。在兩個層次的巢狀結構後,Node就放棄並以[Object]作為佔位符輸出: const obj = { name: 'Flavio', age: 35, person1: { name: 'Tony', age: 50, person2: { name: 'Albert', age: 21, person3: { name: 'Peter', age: 23 } } } } console.log(obj) { name: 'Flavio', age: 35, person1: { name: 'Tony', age: 50, person2: { name: 'Albert', age: 21, person3: [Object] } } } 如何輸出完整的物件? 保持輸出格式的最佳方法是使用: console.log(JSON.stringify(obj, null, 2)) 其中的2是用於縮排的空格數。 另一個選擇是使用: require('util').inspect.defaultOptions.depth = null console.log(obj) 但問題是,二級巢狀結構之後的嵌套物件會被攤平。對於複雜的物件可能會造成問題。