這個話題對我來說是一個非常有趣的話題。在許多Web應用程序中,接受用戶輸入並將單個記錄保存到數據庫非常普遍。但是,當您的用戶(或您)想在單個命令中執行多個插入片段時,在本文中,我們將演示如何創建CSV模板和表格來上傳CSV文件,以及如何將CSV解析到一個or Save Mongodb Database。與mongodb。如果您不這樣做,我建議閱讀我的
首先要撰寫Mongodb和Node.js文章的文章。本文介紹了Mongoose如何通過創建強大的模型來創建強大的模式來與MongoDB互動。如果您已經對Mongoose有很好的了解,那麼讓我們繼續進行。
入門開始,您將實例化一個新的node.js應用程序。在命令提示符中,導航到要託管node.js應用程序的位置並執行以下命令:使用
mkdir csvimport<br>cd csvimport<br>npm init -y<br>
-y
>由於此Web應用程序將通過Web表單接受文件,因此我們還將使用Express Sub-Package Express文件上傳。讓我們現在也安裝它:
npm install express --save<br>
,創建一個
index.js.js.jsnpm install express-fileupload --save<br>
>
這個文件導入Exprests Express和Express文件上傳庫,配置Web應用程序以使用文件上傳,並在端口8080上聽。它還使用Express使用Express創建了一個路由,該路由將是Web應用程序的默認著陸頁。此路由返回一個包含Web表單的文件,該文件將允許用戶上傳CSV文件。 >您可以通過在終端中運行命令來啟動Web服務器:
var app = require('express')();<br>var fileUpload = require('express-fileupload');<br>var server = require('http').Server(app);<br> <br>app.use(fileUpload());<br><br>app.get('/', function (req, res) {<br> res.sendFile(__dirname + '/index.html');<br>});<br>server.listen(8080, () => {<br> console.log('Server started on port 8080')<br>})<br>
您應該在端口
node index.js<br>
808080 >>>。這意味著您已經成功地連接到Web服務器。 在根目錄中,創建
index.html文件。該文件創建了用於上傳CSV文件的表單。
>此html文件包含兩個重要的東西:encType
multipart/form-data
file
> 設置為multipart/form-data
>的表單和帶有類型的輸入字段的
>您會看到較早創建的表單。如果您閱讀了文章文章,則創建了作者模式。在本文中,您將重新創建此模式,並允許用戶大量將作者集合導入MongoDB數據庫。讓我們看一下作者模式。不過,在我們這樣做之前,您可能需要猜到了 - 我們需要安裝Mongoose軟件包:
mkdir csvimport<br>cd csvimport<br>npm init -y<br>
>>
>>>>>>>>>>>>>>>npm install express --save<br>
> >>>>>>>>>>>>>
>npm install express-fileupload --save<br>
JSON2CSV軟件包。此NPM軟件包將JSON帶有列標題和正確的行末端轉換為CSV。您將為模板路由的此新代碼附加到先前創建的index.js 文件:
>該代碼所做的第一件事是包含一個新的var app = require('express')();<br>var fileUpload = require('express-fileupload');<br>var server = require('http').Server(app);<br> <br>app.use(fileUpload());<br><br>app.get('/', function (req, res) {<br> res.sendFile(__dirname + '/index.html');<br>});<br>server.listen(8080, () => {<br> console.log('Server started on port 8080')<br>})<br>
file(下一個下一步創建),並為get
,您創建了要在CSV模板中包含的字段數組。這可以通過兩種方式之一來完成。第一種方法(在本教程中完成)是創建要包含在模板中的字段的靜態列表。第二種方法是通過從作者架構中提取屬性來動態創建字段列表。
mkdir csvimport<br>cd csvimport<br>npm init -y<br>
>使用動態方法是一個好主意,但是當您不想在CSV模板上包含多個屬性時,它會變得有些複雜。在這種情況下,我們的CSV模板不包括_id
和created
>屬性,因為這些屬性將通過代碼填充。但是,如果您沒有要排除的字段,那麼動態方法也將起作用。
>軟件包從JavaScript對象創建CSV模板。此json2csv
對象將是此路線的結果。 csv
authors.csvres
file。您的Web瀏覽器,Web表單將顯示使用鏈接以下載模板。單擊鏈接以下載模板將允許您下載authors.csv 文件。該文件將在上傳之前填充。
在Microsoft Excel中打開模板文件,CSV文件應以此為基礎:
>這是填充的CSV文件的一個示例:npm install express --save<br>
index.js
文件需要一些更新才能連接到mongoDB並創建一個新的帖子路由,該路由將使用數據庫連接和配置的新的帖子路由接受文件上傳:npm install express-fileupload --save<br>
fast-csv
,是時候分析CSV文件了。幸運的是,有幾個很棒的圖書館可以幫助完成這項工作。對於本教程,我們將使用可以使用以下命令安裝的
var app = require('express')();<br>var fileUpload = require('express-fileupload');<br>var server = require('http').Server(app);<br> <br>app.use(fileUpload());<br><br>app.get('/', function (req, res) {<br> res.sendFile(__dirname + '/index.html');<br>});<br>server.listen(8080, () => {<br> console.log('Server started on port 8080')<br>})<br>
post
>創建了與模板路由相似的郵路路由,該模板路由從upload.js
接下來,定義和導出了post
index.jsfile的函數。在此功能內部是魔術發生的地方。
該功能首先檢查請求主體中包含一個文件。如果沒有,則返回錯誤,指示必須上傳文件。
>上傳文件後,對文件的引用保存到稱為authorFile
>的變量。這是通過訪問數組中的files
陣列和file
屬性匹配我的文件輸入名稱的名稱,該名稱在file
index.html> example中首先定義。該數組將用於將數據保存到數據庫中。此功能將CSV文件作為字符串接受。該字符串是從屬性中提取的。
authors
>下一行包含兩個
>> andfast-csv
>。這些都設置為fromString
。這告訴庫,CSV文件的第一行將包含標題,並且應忽略空行。 authorFile.data
>data
>使用配置的選項,我們設置了兩個偵聽器函數,這些函數在
事件。此事件包含解析數據的JavaScript對象。 fast-csv
headers
>該對像已更新以包含作者架構的ignoreEmpty
屬性,並具有新的true
>。然後將此對象添加到
>函數,將data
>的數組傳遞給它。 end
>data
如果發生錯誤試圖保存數組,則會拋出異常。否則,向用戶顯示了一條成功消息,指示已上傳並保存到數據庫中。
>數據庫架構應與此相似:_id
ObjectId
authors
>
這可以通過多種方式完成。如果要實現它,我建議更新data
回調功能以檢查作者數組的長度。當數組超過您定義的長度時,例如100,在數組上調用Author.create
>函數,然後將數組重置為空。然後將記錄保存在100的塊中。請務必將最終的create
呼叫留在end
回調功能中,以保存最終記錄。
享受!
>
已通過Mary Okosun的貢獻進行了更新。 Mary是位於尼日利亞拉各斯的軟件開發人員,在Node.js,JavaScript,MySQL和NoSQL Technologies中具有專業知識。
以上是批量使用Node.js將CSV文件導入MongoDB的詳細內容。更多資訊請關注PHP中文網其他相關文章!