使用Node.js一次遞增多個文件夾的數字

如何解決一個小型文件夾管理問題 我有一個問題。 我正在創建許多格式為以下的文件夾: 1-yo 2-hey 3-cool 4-hi 5-whatsup 一個數字後面跟著一個破折號和一個字符串。 我創建了40個這樣的文件夾,然後我意識到我必須在中間插入一個文件夾,像這樣: 1-yo 2-hey 3-NEWONE 3-cool 4-hi 5-whatsup 問題是,我必須更改所有的文件夾數字,現在它們應該跟隨3-NEWONE文件夾。 我希望最終的結果是這樣的,所有新條目後面的數字都是遞增的: 1-yo 2-hey 3-NEWONE 4-cool 5-hi 6-whatsup 我手動完成了一次,然後我意識到我將來肯定會重複這個過程,所以我使用Node.js命令行應用程序將其自動化。 我將文件命名為increment.js,並選擇使用命令行參數來設置我想要從哪個數字開始,像這樣: node rename.js 4 獲取數字很簡單,從process.argv中獲取: const args = process.argv.slice(2) const startingNumber = args[0] 如果沒有提供數字,我們將顯示錯誤並結束程序: if (!startingNumber) { console.log('請添加一個數字參數') return } 現在我們有了這個數字,我們可以開始獲取我們需要遞增的文件夾名稱。腳本將位於包含所有子文件夾的同一文件夾中,所以我們可以從./讀取,這表示當前文件夾。 這是我們如何獲取當前文件夾中包含的所有文件和子文件夾的名稱: const fs = require('fs') const folders = fs .readdirSync('./') .map(fileName => { return fileName }) 讓我們過濾一下,以確保我們只獲取文件夾: const fs = require('fs') const isFolder = fileName => { return !...

使用Node.js和Express创建GraphQL服务器

這是一個關於如何使用Node.js和Express創建GraphQL服務器的簡單教程。 首先,創建一個新的Node.js項目,如果您還沒有設置一個的話: npm init --y 這個命令會創建我們使用npm所需的package.json文件。 安裝npm包express,graphql和express-graphql: npm install express graphql express-graphql 創建一個app.js文件,並開始初始化Express服務器: const express = require('express') const app = express() app.listen(3000, () => { console.log('App listening on port 3000') }) 現在我們添加express-graphql庫,它是一個中間件(middleware),我們將它應用於/graphql路由: const express = require('express') const graphqlHTTP = require('express-graphql') const app = express() app.use('/graphql', graphqlHTTP()) app.listen(3000, () => { console.log('App listening on port 3000') }) 我們需要傳遞一個對象,該對象包含了 schema 屬性,該屬性必須包含一個schema定義。 我們首先需要定義一個schema! 創建一個schema.js文件,然後在其中引入graphql庫,使用對象解構語法,我們獲取GraphQLSchema,GraphQLObjectType和GraphQLString這幾個對象: const graphql = require('graphql') const { GraphQLSchema, GraphQLObjectType, GraphQLString } = graphql 然後,我們通過初始化一個新的GraphQLSchema實例,並傳遞一個對象給它,該對象包含一個query屬性。該屬性是一個GraphQLObjectType對象的實例:...

使用Node.js和Puppeteer進行網頁爬蟲

一個關於網頁爬蟲的簡短入門教程 網頁爬蟲的任務是下載網頁並從中提取某種信息。 我最近使用了一個附帶LCD顯示器的Arduino板製作了一個小項目。使用Johnny-Five,可以使用Node.js來編程Arduino,我想要從山頂上測量的溫度,並在Arduino板上顯示出來。 我使用了Google開發的Puppeteer來進行爬蟲任務。Puppeteer是一個很棒的工具,它是一個可以用來控制無頭Chrome實例的Node.js庫。 這意味著我們基本上是使用Chrome,只是以編程的方式操作。 Puppeteer有很多實際的用途,包括自動化測試,製作屏幕截圖,創建單頁面應用程序的服務器端渲染版本等等。 首先,通過以下命令安裝它: npm install puppeteer 在Node.js文件中引入它: const puppeteer = require('puppeteer'); 然後,我們可以使用launch()方法創建一個瀏覽器實例: (async () => { const browser = await puppeteer.launch() })() 我們使用了await,所以我們必須將這個方法調用包裹在一個async函數中,然後立即調用這個函數。 接下來,我們可以使用browser對象上的newPage()方法來獲取page對象: (async () => { const browser = await puppeteer.launch() const page = await browser.newPage() })() 接下來,我們在page對象上調用goto()方法來加載頁面: (async () => { const browser = await puppeteer.launch() const page = await browser.newPage() await page.goto('https://website.com') })() 最後,我們可以通過調用page的evaluate()方法來獲取頁面的內容。該方法接受一個回調函數,其中我們可以添加檢索所需頁面元素的代碼。該函數在頁面的上下文中執行,所以我們可以訪問document和所有瀏覽器API。我們返回一個新的對象,這將是我們的evaluate()方法調用的結果。 我們可以使用Selectors API從頁面中檢索數據。 (async () => { const browser = await puppeteer....

使用Node.js服務一個HTML頁面

了解如何使用Node.js無依賴項目來服務一個 index.html HTML 頁面。 我有一個需求,需要從Node.js服務器中提供一個HTML頁面,以下是實現這一需求的最簡代碼: const http = require('http') const fs = require('fs') const server = http.createServer((req, res) => { res.writeHead(200, { 'content-type': 'text/html' }) fs.createReadStream('index.html').pipe(res) }) server.listen(process.env.PORT || 3000) 不需要任何依賴項。 將此代碼添加到一個 app.js 文件中,然後創建一個 index.html 頁面,運行 node app.js 命令。 請注意,上述代碼不支持提供靜態資源,它僅僅提供 index.html 頁面的服務。

使用Node.js與Google Analytics API互動

學習如何使用官方的googleapis套件,在Node.js應用程式中與Google Analytics API互動。我們將使用JSON Web Token並看一些範例。 注意:uBlock Origin封鎖這篇文章中的圖片,因為路徑中含有「analytics」這個詞。所以請確保在此頁面上禁用它,以便看到圖片。🖼 在這篇文章中,我將展示如何使用Node.js和Google Analytics API的一些範例。 環境變數 將使用者新增至Google Analytics 匯入Google庫 定義範圍 Google Analytics報告API 建立JWT 執行請求 指標 常見程式碼 取得今日會話數 取得來自有機來源(搜尋引擎)的今日會話數 取得昨日會話數 取得過去30天的會話數 取得過去30天內使用的瀏覽器 取得使用Chrome的訪客數 按流量來源取得會話數 Google Analytics即時API Google提供了一個很棒的npm套件:googleapis。我們將使用它作為我們API互動的基礎建構塊。 驗證是與API互動的重要部分。請查看這篇關於如何驗證Google API的文章。在本文中,我假設您已經閱讀了那篇文章,並且知道如何執行JWT驗證。 環境變數 一旦從Google下載了JSON金鑰文件,將client_email和private_key值設定為環境變數,以便通過以下方式存取: process.env.CLIENT_EMAIL process.env.PRIVATE_KEY 將使用者新增至Google Analytics 由於在這些範例中使用了服務對服務API,您需要將client_email值添加到您的Google Analytics配置文件中。轉到「管理」面板,然後在屬性或視圖中點擊「使用者管理」。 然後新增您在JSON文件中找到的client_email鍵中的電子郵件: 匯入Google庫 const { google } = require('googleapis') 請記住將{}放在google物件周圍,因為我們需要從googleapis庫中解構出它(否則我們需要調用google.google,這樣看起來並不漂亮)。 定義範圍 以下代碼行設置了範圍: const scopes = 'https://www.googleapis.com/auth/analytics.readonly' Google Analytics API定義了多個範圍: https://www.googleapis.com/auth/analytics.readonly:查看數據 https://www.googleapis.com/auth/analytics:查看和管理數據 https://www.googleapis.com/auth/analytics.edit:編輯管理實體 https://www.googleapis.com/auth/analytics.manage.users:管理帳戶使用者和權限 https://www.googleapis.com/auth/analytics.manage.users.readonly:查看使用者及其權限 https://www.googleapis.com/auth/analytics.provision:創建新的Google Analytics帳戶 您應該始終選擇授予最少權限的範圍。 由於我們希望僅查看報告,所以這裡選擇了https://www.googleapis.com/auth/analytics.readonly,而不是https://www.googleapis.com/auth/analytics。 Google Analytics報告API 注意:您也可以使用“Google Analytics報告API”來訪問這些權限。...

使用Node進行HTTP POST請求

了解如何使用Node進行HTTP POST請求 在Node中進行HTTP POST請求有很多方法,具體取決於你想使用的抽象級別。 在Node中執行HTTP請求最簡單的方法是使用Axios庫: const axios = require('axios') axios .post('/todos', { todo: '買牛奶', }) .then((res) => { console.log(`statusCode: ${res.statusCode}`) console.log(res) }) .catch((error) => { console.error(error) }) 另一種方法是使用Request庫: const request = require('request') request.post( '/todos', { json: { todo: '買牛奶', }, }, (error, res, body) => { if (error) { console.error(error) return } console.log(`statusCode: ${res.statusCode}`) console.log(body) } ) 到目前為止介紹的2種方法需要使用第三方庫。 使用Node標準模塊也可以進行POST請求,雖然比前面兩種選項更冗長: const https = require('https') const data = JSON.stringify({ todo: '買牛奶', }) const options = { hostname: 'yourwebsite....

使用Node進行HTTP請求

如何使用Node.js進行HTTP請求,包括GET、POST、PUT和DELETE方法。 我使用了HTTP這個術語,但HTTPS應該在所有地方都使用,因此這些示例中使用的是HTTPS而不是HTTP。 表演GET請求 const https = require('https'); const options = { hostname: 'flaviocopes.com', port: 443, path: '/todos', method: 'GET' }; const req = https.request(options, (res) => { console.log(`statusCode: ${res.statusCode}`); res.on('data', (d) => { process.stdout.write(d); }); }); req.on('error', (error) => { console.error(error); }); req.end(); 表演POST請求 const https = require('https'); const data = JSON.stringify({ todo: '買牛奶' }); const options = { hostname: 'flaviocopes.com', port: 443, path: '/todos', method: 'POST', headers: { 'Content-Type': 'application/json', 'Content-Length': data....

使用Node輸出到命令行

如何使用Node將信息打印到命令行控制台,從基本的console.log到更複雜的場景。 使用console模組進行基本輸出 清除控制台 元素計數 打印堆棧跟踪 計算耗時 stdout和stderr 為輸出添加顏色 創建進度條 使用console模組進行基本輸出 Node提供了console模組,該模組可以提供與命令行交互的各種非常有用的方法。它基本上與在瀏覽器中找到的console對象相同。 最基本和最常用的方法是console.log(),它將將您傳遞給它的字符串打印到控制台。如果您傳遞一個對象,它將將它呈現為字符串。您可以將多個變量傳遞給console.log,例如: const x = 'x' const y = 'y' console.log(x, y) Node將打印兩個值。 您還可以通過傳遞變量和格式化符號來格式化漂亮的短語。例如: console.log('我的 %s 有 %d 歲', '貓', 2) %s 將變量格式化為字符串 %d 或 %i 將變量格式化為整數 %f 將變量格式化為浮點數 %O 用於打印對象表示 示例: console.log('%O', Number) 清除控制台 console.clear()可以清除控制台(行為可能取決於所使用的控制台)。 元素計數 console.count()是一個方便的方法。 看一下下面的代碼: const x = 1 const y = 2 const z = 3 console.count('x的值為' + x + '被檢查了多少次?') console.count('x的值為' + x + '被檢查了多少次?') console....

使用Puppeteer進行網頁爬蟲

這篇文章將使用Puppeteer創建一個“JavaScript工作版”,用於彙總JavaScript開發人員的遠程工作。 以下是完成這個項目的步驟: 使用Puppeteer創建基於Node.js的網頁爬蟲,從remoteok.io網站獲取工作信息 將工作信息存儲到數據庫中 創建基於Node.js的應用程序,將這些工作信息顯示在自己的網站上 注意:我只是將此網站作為示例,並不建議您進行網頁爬蟲,因為該網站有官方API可供使用。我只是用它來解釋Puppeteer如何與人人皆知的網站配合工作,以及如何在實踐中使用它。 讓我們開始吧! 為JavaScript工作創建網頁爬蟲 我們將從remoteok.io這個很棒的遠程工作網站上爬取JavaScript工作。 此網站上有許多不同類型的工作。JavaScript工作在“JavaScript”標籤下列出,在撰寫本文的時候,可以在此頁面上找到:https://remoteok.io/remote-javascript-jobs 我之所以說“在撰寫本文的時候”是因為這是一個重要的認識:網站可能隨時更改。我們無法確保任何事情。使用網頁爬蟲時,網站的任何更改都可能使我們的應用程序停止工作。這不是一個API,像是兩個方之間的合同。 根據我的經驗,網頁爬蟲應用程序需要更多的維護工作。但有時我們別無選擇,只能使用它來完成特定的任務,所以它們仍然是我們可以使用的有效工具。 設置Puppeteer 我們首先創建一個新的文件夾,在文件夾內運行以下命令: npm init -y 然後使用以下命令安裝Puppeteer: npm install puppeteer 現在創建一個app.js文件,在文件頂部引入剛剛安裝的puppeteer庫: const puppeteer = require("puppeteer") 接下來,我們可以使用launch()方法創建一個瀏覽器實例: ;(async () => { const browser = await puppeteer.launch({ headless: false }) })() 我們通過將 { headless: false } 配置對象傳遞給launch()方法來顯示Chrome,讓Puppeteer執行操作時我們可以看到發生的情況,這在構建應用程序時很有幫助。 接下來,我們可以使用browser對象上的newPage()方法獲取page對象,然後在page對象上調用goto()方法加載JavaScript工作頁面: const puppeteer = require('puppeteer') ;(async () => { const browser = await puppeteer.launch() const page = await browser.newPage() await page.goto("https://remoteok.io/remote-javascript-jobs") })() 現在從終端運行node app.js,會啟動一個Chromium實例,加載我們告訴它加載的頁面。...

使用Python將GoPro用作遠程網絡攝像頭

我有一個GoPro Hero 7 White,最近我發現可以使用一個名為GoPro API for Python的Python包將其用作遠程網絡攝像頭,該包位於https://github.com/konradit/gopro-py-api。 首先使用pip3 install goprocam安裝該包,然後在GoPro上啟用WiFi連接。 這將使GoPro開始一個WiFi網絡。從計算機連接到該網絡。 現在您可以準備編寫Python程序,對攝像頭進行任何想做的事情。 從goprocam中導入GoProCamera和constants: from goprocam import GoProCamera, constants 然後調用GoProCamera.GoPro()方法獲取一個相機對象: gopro = GoProCamera.GoPro(constants.gpcontrol) 使用以下代碼獲取攝像頭狀態的概述: gopro.overview() 在我的情況下,我得到了以下結果: 相機概述 當前模式:照片 當前子模式:連拍 當前視頻分辨率:超出範圍 當前視頻幀速率:240 已拍攝的照片數量:0 已拍攝的視頻數量:0 剩餘的視頻時間:02:10:44 剩餘的照片數量:11257 電池剩餘容量:一半 SD卡剩餘空間:58.04GB 相機SSID:HERO7 White 是否在錄製:未錄製 - 待機 連接的客戶端數量:2 相機型號:HERO7 White 固件版本:H18.02.02.10.00 序列號:C3343323864041 現在您可以使用多種方法讓GoPro採取動作。 您可以立即拍攝照片: gopro.take_photo() 您可以在2秒後拍攝照片: gopro.take_photo(2) 您可以拍攝10秒的視頻: gopro.shoot_video(10) 或者,您可以直接開始錄製,而沒有預設的結束時間,使用以下代碼: gopro.shoot_video() 您可以使用以下代碼下載最後拍攝的照片或視頻: gopro.downloadLastMedia() 您還可以為文件設置一個名稱: gopro.downloadLastMedia("pic.JPG") 提示:我遇到了一個問題,當我調用downloadLastMedia()下載圖片時,我遇到了錯誤,顯示“Not supported while recording or processing media”。為了解決這個問題,我必須在調用downloadLastMedia()之前調用gopro.getStatusRaw()。 還有很多有用的方法,例如: KeepAlive():防止GoPro關閉 setZoom():設置縮放倍率 downloadAll():下載攝像頭中的所有媒體 delete("last"):刪除最後一個媒體文件 delete("all"):刪除所有媒體文件 power_off():關閉相機 power_on():開啟相機 stream():開始流式傳輸(尚未完全理解) 您可以在這裡找到許多示例,並在這裡找到更多文檔。...