Node.js連接mongo數(shù)據(jù)庫上傳文件的方法步驟
更新時間:2022年05月09日 14:45:31 作者:鵬程933
本文主要介紹了Node.js連接mongo數(shù)據(jù)庫上傳文件的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
效果
初始化
- 創(chuàng)建項目文件夾mondo-express
- 安裝包 npm i express-generator -g(作用一鍵生成項目列表)
- 在項目文件夾mondo-express用終端打開輸入npx express-generator自動生成項目目錄
- 安裝包
- 終端進入默認創(chuàng)建的package.json輸入 npm i下載依賴包
- 再下載用于連接數(shù)據(jù)庫包輸入 npm i mongoose
- 用于上傳文件的包 npm i formidable
- 用于加密的包npm i bcryptjs
- 更改下package.json里的文件信息,以方便再終端啟動“scripts”: { “start”: “nodemon ./bin/www” }
- 終端啟動時輸入npm start
model 下創(chuàng)建index.js用于連接數(shù)據(jù)庫時的信息
const mongo=require("mongoose"); const userSchema=new mongo.Schema({ username:String, password:String, gender:String, tel:String, avatarUrl:String }) const userModel=mongo.model('runoob',userSchema,'users') module.exports=userModel
修改app.js文件里的信息
- 引入數(shù)據(jù)庫連接
- 引入路由模塊
var createError = require('http-errors'); var express = require('express'); var path = require('path'); var cookieParser = require('cookie-parser'); var logger = require('morgan'); var indexRouter = require('./routes/index'); var usersRouter = require('./routes/users'); var app = express(); // 連接數(shù)據(jù)庫 const mongoose = require('mongoose'); // 引入 mongoose,用于連接數(shù)據(jù)庫 mongoose.connect('mongodb://localhost:27017/runoob'); // 連接數(shù)據(jù)庫 // view engine setup app.set('views', path.join(__dirname, 'views')); app.set('view engine', 'jade'); app.use(logger('dev')); app.use(express.json()); app.use(express.urlencoded({ extended: false })); app.use(cookieParser()); app.use(express.static(path.join(__dirname, 'public'))); //掛載路由 app.use('/users', usersRouter); // catch 404 and forward to error handler app.use(function(req, res, next) { next(createError(404)); }); // error handler app.use(function(err, req, res, next) { // set locals, only providing error in development res.locals.message = err.message; res.locals.error = req.app.get('env') === 'development' ? err : {}; // render the error page res.status(err.status || 500); res.render('error'); }); module.exports = app;
router下修改user.js文件
這里是處理客戶端請求的核心,遵循REST架構風格
- GET-查詢
- POST-增加
- PUT-修改
- DELETE刪除
查找
- 通過:_id?判斷是否有id傳入并執(zhí)行相應響應,?表示可能有id也可能沒有id
- 如果有id傳入,按照id在數(shù)據(jù)庫查找并返回對應的值
- 沒有則查找數(shù)據(jù)庫所有的內容并返回
增加
- 先初始化下form這里有三個參數(shù)代表允許上傳一個文件,文件存放路徑,保存原始文件后綴
- form.parse(請求,回調)表示將req中內容交給form回調函數(shù)處理
- fields里面包含普通文本信息,結構出來,files里面有文件信息,對象.的形式拿出來
- 進行下非空驗證,和用戶名是否存在驗證
- 保存時需要對密碼加密,這里采用bcrypt.hashSync(password,10)第一個參數(shù)要加密對象,第二個加密強度
- 向數(shù)據(jù)庫保存信息,成功后返回給客戶端
修改
- 通過/:_id拿到要修改對象的id信息
- 執(zhí)行修改,成功后返回成功信息
刪除
- 通過/:_id拿到刪除對象id信息
- 執(zhí)行刪除,成功后返回成功信息
var express = require('express'); const db=require('../model/index') const formidable=require('formidable') const path=require('path') var router = express.Router(); const bcrypt=require('bcryptjs') // /* GET users listing. */ //查找 router.get('/:_id?',(req,res)=>{ const {_id}=req.params; if(_id){ console.log(_id); db // .findOne({_id:'6274ee9d620974ebd2122df8'}) // .find({_id:_id}) .findById(_id) .then(data=>{ res.json({ code:200, status:1, data, }) }) }else { db .find() .then(data=>{ res.json({ code:200, status:0, data }) }) } }) //增加 router.post('/api/upload',(req,res,next)=>{ const form=formidable({ multiples: true, uploadDir: path.join(__dirname, '../static/upload'), keepExtensions: true, }) form.parse(req,(err,fields, files)=>{ if(err) { next(err); return; } const {name,password,gender,tel}=fields; const avatarUrl="/upload/"+ files.avatar.newFilename;//文件夾,包含上傳文件 if(!name || !password){ res.json({ code:200, status:1, message:"用戶名或密碼不能為空" }) }else { db.findOne({username:name}).then(data=>{ if(data==null){ const hash=bcrypt.hashSync(password,10) new db({username:name,password:hash,gender,tel,avatarUrl}) .save() .then(data=>{ res.json({ code:200, status:0, message:data }) }) }else { res.json({ code:200, status:1, message:"用戶名已存在" }) } }) } }) }) //修改 router.put('/:_id',(req,res)=>{ const _id=req.params; const {username,password,gender,tel,avatarUrl}=req.body; db .updateOne({_id},{username,password,gender,tel,avatarUrl}) .then((data)=>{ res.json({ code:200, status:0, message:"修改成功" }) }) }) //刪除 router.delete('/:_id',(req,res)=>{ const _id=req.params; db.deleteOne({_id}).then((data)=>{ res.send({ code:200, status:0, message:"刪除成功" }) }) }) module.exports = router;
創(chuàng)建上傳文件保存文件夾
文件夾mondo-express下新建一個static/upload
在public下新建一個index.html 用于請求時的主頁面
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h2>With <code>"express"</code> npm package</h2> <form action="users/api/upload" enctype="multipart/form-data" method="post"> <div>name: <input type="text" name="name" /></div> <div>password:<input type="password" name="password"></div> <div>gender:<input type="text" name="gender"></div> <div> tel:<input type="text" name="tel"></div> <div>File: <input type="file" name="avatar" multiple="multiple" /></div> <input type="submit" value="Upload" /> </form> </body> </html>
到此這篇關于Node.js連接mongo數(shù)據(jù)庫上傳文件的方法步驟的文章就介紹到這了,更多相關Node.js連接mongo上傳文件內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
詳解基于 Node.js 的輕量級云函數(shù)功能實現(xiàn)
這篇文章主要介紹了詳解基于 Node.js 的輕量級云函數(shù)功能實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-07-07node使用mysql獲取數(shù)據(jù)庫數(shù)據(jù)中文亂碼問題的解決
這篇文章主要介紹了node使用mysql獲取數(shù)據(jù)庫數(shù)據(jù)中文亂碼問題的解決,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-12-12