使用Express服務靜態資源

如何在Express中直接從文件夾中提供靜態資源。 在public子文件夾中放置圖像、CSS等資源並將其公開於根目錄是常見的做法: const express = require('express') const app = express() app.use(express.static('public')) /* ... */ app.listen(3000, () => console.log('伺服器已啟動')) 如果在public/中有一個index.html文件,則您現在可以通過訪問根域名網址(http://localhost:3000)來提供該文件。

使用Express進行文件傳送

Express提供了一個方便的方法來以附件的形式傳送文件: Response.download() 一旦使用這個方法來傳送文件的路由被用戶訪問,瀏覽器將提示用戶下載。 Response.download()方法允許您將文件附加到請求中,瀏覽器將把文件保存到磁盤,而不是在頁面上顯示出來。 app.get('/', (req, res) => res.download('./file.pdf')) 在應用程式的上下文中: const express = require('express') const app = express() app.get('/', (req, res) => res.download('./file.pdf')) app.listen(3000, () => console.log('伺服器準備就緒')) 您可以設定要以自訂文件名發送的文件: res.download('./file.pdf', 'user-facing-filename.pdf') 該方法提供了一個回調函數,您可以在文件傳送完成後執行代碼: res.download('./file.pdf', 'user-facing-filename.pdf', (err) => { if (err) { //處理錯誤 return } else { //執行其他操作 } })

使用Go建立CLI命令:cowsay

Cowsay 是那些你無法生活沒有的應用之一。 它基本上是根據傳遞給它的任何訊息生成ASCII圖片的一頭牛,以上的屏幕截圖中使用 fortune 生成。 不僅限於牛類,它還可以打印企鵝、麋鹿和許多其他動物。 聽起來像是一個適合移植到Go的有用應用! 我還喜歡它附帶的簡單英文許可證: ============== cowsay 許可證 ============== cowsay 根據Perl的許可證進行分發:艺术许可证或GNU通用公共许可证。如果您不想為了自己去查找和閱讀這些許可證,請使用我更喜歡的部分: (0)我是寫它的人,你不是。 (1)如果您將代碼用於其他目的,請給予應有的應有的好處。 (2)如果您有任何錯誤修復或建議,請通知我,以便我可以加以整合。 (3)如果您試圖從cowsay牟利,您就有問題。 讓我們從定義問題開始.我們想通過一個管道接受輸入,並讓我們的牛說出來. 第一個迭代從管道讀取用戶輸入並將其打印回來.沒有太複雜. package main import ( "bufio" "fmt" "io" "os" ) func main() { info, _ := os.Stdin.Stat() if info.Mode()&os.ModeCharDevice != 0 { fmt.Println("該命令僅針對管道工作。") fmt.Println("用法:fortune | gocowsay") return } reader := bufio.NewReader(os.Stdin) var output []rune for { input, _, err := reader.ReadRune() if err != nil && err == io.EOF { break } output = append(output, input) } for j := 0; j < len(output); j++ { fmt....

使用Go進行CPU和內存監控:入門指南

Go語言生態系統提供了一種非常簡便的方法來對應用程序進行監控。 本文將介紹一個由Dave Cheney提供的包,通過在main()函數中添加一行代碼,可以非常容易地對程序進行調試。 開始你的Go CPU監控 步驟 1:下載github.com/pkg/profile 運行以下命令: go get github.com/pkg/profile 步驟 2:將監控功能添加到main()函數中 在你的代碼中加入以下的import語句: package main import ( //... "github.com/pkg/profile" ) func main() { // 預設啟動CPU監控 defer profile.Start().Stop() //... } 步驟 3:編譯並運行你的程序 這將在臨時文件夾中生成一個*.pprof文件,並告訴你它的位置(稍後會需要): 2017/08/03 14:26:28 profile: cpu profiling enabled, /var/...../cpu.pprof 步驟 4:如果尚未安裝graphviz,請先安裝該軟件 它用於生成pdf格式的圖形。在Mac上只需運行brew install graphviz命令。其他平台的安裝方法請參考https://www.graphviz.org。 步驟 5:運行go tool pprof 使用你的二進制文件位置和cpu.pprof文件的位置作為參數運行以下命令即可。你可以生成不同格式的分析報告,其中PDF格式的報告效果非常好: go tool pprof --pdf ~/go/bin/yourbinary /var/path/to/cpu.pprof > file.pdf 你還可以生成其他類型的可視化報告,例如txt報告: go tool pprof --txt ~/go/bin/yourbinary /var/path/to/cpu.pprof > file.txt 內存監控 內存監控與CPU監控基本相同,只需要在profile.Start()的默認配置上傳遞profile.MemProfile標誌即可: defer profile....

使用Go構建網絡爬蟲來檢測重複標題

在本文中,我將編寫一個小型的網絡爬蟲。我不確定我的網站是否具有良好的頁面標題以及是否存在重複的標題,因此我寫了這個小型工具來查找。 我將從編寫一個接受命令行中的起始頁面的命令開始,並跟隨任何具有原始URL為基礎的鏈接。 隨後,我將添加一個可選的標誌,以檢測網站是否具有重複的標題,這對於SEO目的可能很有用。 介紹golang.org/x/net/html golang.org/x套件是由Go團隊維護的套件,但由於各種原因,它們不是標準庫的一部分。 也許它們太專門了,不會被大多數Go開發人員使用。 也許它們仍在開發中或者實驗中,因此無法包含在stdlib中,stdlib必須遵循Go 1.0的承諾,即不進行不向後兼容的更改-當某些東西進入stdlib時,它就是“最終版”。 其中之一就是golang.org/x/net/html。 要安裝它,執行以下命令 go get golang.org/x/net... 在本文中,我將特別使用html.Parse()函數和html.Node結構: package html type Node struct { Type NodeType Data string Attr []Attribute FirstChild, NextSibling \*node } type NodeType int32 const ( ErrorNode NodeType = iota TextNode DocumentNode ElementNode CommentNode DoctypeNode ) type Attribute struct { Key, Val string } func Parse(r io.Reader) (\*Node, error) 列出網站鏈接和頁面標題 下面的程式首先接受URL,並計算出它找到的唯一鏈接,其輸出如下: http://localhost:1313/go-filesystem-structure/ -> Go項目的文件系統結構 http://localhost:1313/golang-measure-time/ -> 在Go程序中測量執行時間 http://localhost:1313/go-tutorial-fortune/ -> Go CLI教程:fortune克隆版 http://localhost:1313/go-tutorial-lolcat/ -> 使用Go構建命令行應用程序:lolcat 讓我們從main()開始,因為它顯示了程序的高級概述。...

使用Jest对JavaScript进行测试

Jest是一个用于测试JavaScript代码的库。它是一个由Facebook维护的开源项目,特别适用于React代码的测试,尽管不仅限于此:它可以测试任何JavaScript代码。Jest非常快速和易于使用。 Jest简介 安装 创建第一个Jest测试 使用VS Code运行Jest 匹配器 设置 清除 使用describe()分组测试 测试异步代码 回调函数 Promises Async/await 模拟 在不影响函数代码的情况下追踪包的调用 模拟整个包 模拟单个函数 预先构建的模拟 快照测试 Jest简介 Jest是一个用于测试JavaScript代码的库。 它是一个由Facebook维护的开源项目,特别适用于React代码的测试,尽管不仅限于此:它可以测试任何JavaScript代码。它的优势是: 快速 可以执行快照测试 它具有某些约定,并且提供了一切必要的东西,无需进行选择 Jest是一个和Mocha非常相似的工具,尽管它们之间存在一些差异: Mocha更灵活,而Jest有一套规则 Mocha需要更多的配置,而Jest通常可以直接运行,因为它有一套规则 Mocha更早并且更稳定,拥有更多的工具集成 在我看来,Jest最重要的特点是它是一个开箱即用的解决方案,无需与其他测试库进行交互即可完成工作。 安装 在create-react-app中,默认安装了Jest,所以如果你使用它,你不需要安装Jest。 使用Yarn可以在其他项目中安装Jest: yarn add --dev jest 或者使用npm: npm install --save-dev jest 请注意,我们都将Jest放在了package.json文件的devDependencies部分中,这样它将仅在开发环境中安装,而不会安装在生产环境中。 将以下代码添加到package.json文件的scripts部分中: { "scripts": { "test": "jest" } } 这样我们就可以使用yarn test或npm run test来运行测试。 或者,您还可以全局安装Jest: yarn global add jest 并使用jest命令行工具运行所有测试。 创建第一个Jest测试 使用create-react-app创建的项目已经默认安装并预配置了Jest,但是将Jest添加到任何项目中都非常简单,只需键入以下命令即可: yarn add --dev jest 将以下代码添加到您的package.json文件中: { "scripts": { "test": "jest" } } 然后通过在shell中执行yarn test来运行测试。...

使用jQuery還是React?

總結一下,這要視情況而定! 首先,你可能根本不需要使用jQuery,只需要使用Web平台的API就可以了,但這是另一個話題。 現在讓我們來專注於這個問題。你應該使用jQuery還是React呢? 我的回答是這樣的。如果你正在構建單頁應用程序(SPA),React是明顯的選擇。React就是為此而建立的,它會負責生成視圖並在頁面上渲染元素,而不需要你考慮DOM(也就是如何在頁面上呈現內容的細節)。 React採用聲明式的方法,使用它你可以在更高的層次上工作。 在構建SPA時,不應該使用jQuery(或者本地瀏覽器API),因為事情可能很快變得復雜。 它最適合用於向可能是服務器呈現的頁面添加交互模塊,雖然它也可以與React應用程序共存。 使用jQuery,你直接與DOM交互以選擇元素,使用選擇器在頁面上找到要操作的元素。 它在更低的層次上操作,並且在應用程序增長的過程中容易出現問題。

使用Link在Next.js中链接两个页面

如何在Next.js中链接两个或更多页面的教程 本教程从第一个Next.js教程开始。我们建立了一个包含一个页面的网站: 我想在这个网站上添加第二个页面,一个博客文章列表。它将呈现在/blog目录下,并且暂时只包含一个简单的静态页面,就像我们的第一个index.js组件一样: 保存新文件后,正在运行的npm run dev进程已经能够渲染出页面,而无需重启。 当我们访问URL http://localhost:3000/blog 时,会得到新的页面: 这是终端显示的内容: 现在,URL是/blog取决于文件名以及其在pages文件夹下的位置。 你可以创建一个pages/hey/ho页面,该页面将显示在URL http://localhost:3000/hey/ho 上。 对于URL的目的,文件中的组件名称并不重要。 尝试查看通过服务器加载的页面源代码,你会看到它将/_next/static/development/pages/blog.js列为已加载的捆绑包之一,而不是像主页那样列出/_next/static/development/pages/index.js。这是因为由于自动代码分割,我们不需要捆绑提供主页的捆绑包。只需要提供博客页面的捆绑包。 我们还可以从blog.js中导出一个匿名函数: export default () => ( <div> <h1>博客</h1> </div> ) 或者如果你更喜欢非箭头函数的语法: export default function() { return ( <div> <h1>博客</h1> </div> ) } 现在,我们有了由index.js和blog.js定义的2个页面,我们可以引入链接。 页面内的普通HTML链接使用a标签完成: <a href="/blog">博客</a> 但是在Next.js中我们不能这样做。 为什么呢?从技术上讲,当然我们可以,因为这是Web,而且在Web上的事情从不会出错(这就是我们仍然可以使用<marquee>标签的原因)。但是使用Next的主要优点之一是一旦页面被加载,到其他页面的过渡非常快,得益于客户端渲染。 如果你使用普通的a链接: const Index = () => ( <div> <h1>主页</h1> <a href='/blog'>博客</a> </div> ) export default Index 现在打开开发者工具,特别是网络面板。当我们第一次加载http://localhost:3000/时,我们下载了所有页面捆绑包: 现在,如果你点击“保留日志”按钮(以避免清除网络面板),然后点击“博客”链接,将发生以下情况: 我们再次从服务器获取了所有这些JavaScript!但是,如果我们已经获取了这些JavaScript,我们就不需要再次获取了。我们只需要获取blog.js页面捆绑包,因为它是页面中唯一新的捆绑包。 为了解决这个问题,我们使用Next提供的一个名为Link的组件。 我们先导入它: import Link from 'next/link' 然后我们将Link用于包装我们的链接,就像这样:...

使用Mac和iOS設備的生產力提升

使用蘋果設備生態系統的生產力優勢 作為蘋果用戶,我可以說自己有些「粉絲」,從2004年購買第一台Mac開始就是如此。 我甚至不考慮使用非iPhone手機或非Mac電腦。 其中一個原因是工具和設備在生態系統中的緊密整合。 如果你對這方面不感興趣,你可能會錯過我每天因為「鎖定」在蘋果舒適區而受益的某些便利之處。 在這篇文章中,我想特別談談其中的一些。 首先是AirDrop:只需在Finder中打開AirDrop圖標,選擇正確的Mac或iOS設備,我就可以輕鬆地在兩台Mac之間傳送照片、視頻和其他東西。 另一個是通用剪貼板。在Mac和iOS設備上啟用連續性,我可以將文本從Mac複製到iOS並進行粘貼,反之亦然。 這是一個極大的提高生產力的方法。 另一個是即時熱點設置和發現。如果我離開Wi-Fi網絡範圍,我只需在Mac上搜索iPhone的Wi-Fi網絡,並開啟熱點 - 隨時隨地都可以連接網絡。 另一個不錯的功能是使用Mac來使用iPhone拍照。這在我進行Arduino教程時非常方便,因為我可以用手機拍攝電子電路的照片。 你只需在Finder中右鍵點擊,選擇「從iPhone(或iPad)導入」並拍照。你還可以掃描文件。

使用node-webkit創建桌面應用程式

在本篇文章中,我將介紹如何使用node-webkit在Mac和Windows上部署和建立網絡應用程式的安裝包。 注意:本篇文章可能過時,內容可能不再適用於最新的版本。 首先,聲明一下:我不會涉及到運行Node.js代碼的部分,只會講解如何打包一個網絡應用程式可以在Mac和Windows上運行。雖然Linux也可以使用node-webkit,但我不會涵蓋這部分的內容。 node-webkit是由其創建者稱為web runtime的工具。 它基於Chromium(儘管名稱如此)和Node.js。它讓我們可以直接從DOM中調用Node.js代碼和模塊,並為使用Web技術編寫的本地應用程式提供了新的可能性。 在本篇文章中,我只是介紹了node-webkit的基本功能,通過為一個網絡應用程式建立和部署一個安裝包,在Mac和Windows上運行,就像運行本地應用程式一樣。 運行應用程式 首先,讓我們來介紹index.html文件: <html> <body> <p>測試</p> </body> </html> 我們還需要一個package.json文件: { "name": "我的網絡應用程式", "main": "index.html" } 這就是代碼的全部內容!真的很簡單。 現在要運行應用程式,從網站https://github.com/rogerwang/node-webkit下載你所使用的平臺的運行時,然後你可以執行以下命令: 1) $ alias nw="open -n -a node-webkit '/PATH\_TO\_APP\_DIRECTORY/' $ ./nw 2) cd /PATH\_TO\_APP\_DIRECTORY/ zip -r app.nw ./ 現在,你已經創建了一個應用程式的安裝包。在Mac上,你可以雙擊運行,或者在Windows上拖動到node-webkit應用程式上運行。 你還可以根據需要在package.json文件中添加許多選項https://github.com/rogerwang/node-webkit/wiki/Manifest-format,這只是一個開始。例如,你可以隱藏帶有地址和調試器的頂欄,設置菜單項目,並且基本上可以滿足你的所有需求。 現在,讓我們深入探討如何打包和分發應用程式。 在Mac上打包應用程式 解壓從node-webkit官網下載的node-webkit.app包。 右鍵點擊,“顯示包內容”,進入Contents/Resources目錄,將使用以下命令建立的app.nw文件複製到該目錄中: $ zip -r app.nw ./ 或者,將應用程式目錄複製到該目錄中,並將其命名為“app.nw”。 完成!現在,你可以在Contents/Info.plist文件中更改默認圖標和屬性。 在Windows上打包應用程式 下載最新的Windows安裝包。 將使用Zip建立的.nw文件複製到該安裝包目錄中,與nw.exe放在一起,並將其命名為app.nw。 運行以下命令: copy /b nw.exe+app.nw app.exe 現在,你可以移除nw.exe和app.nw文件,壓縮該目錄並分發這個安裝包。用戶需要下載這個zip文件,解壓縮後運行其中包含的app.exe文件。