Node.js连接mongo数据库上传文件的方法步骤

 更新时间:2022年05月09日 14:45:31   作者:鹏程933  
本文主要介绍了Node.js连接mongo数据库上传文件的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

效果

请添加图片描述

初始化

  • 创建项目文件夹mondo-express
  • 安装包 npm i express-generator -g(作用一键生成项目列表)
  • 在项目文件夹mondo-express用终端打开输入npx express-generator自动生成项目目录
  • 安装包
    • 终端进入默认创建的package.json输入 npm i下载依赖包
    • 再下载用于连接数据库包输入 npm i mongoose
    • 用于上传文件的包 npm i formidable
    • 用于加密的包npm i bcryptjs
  • 更改下package.json里的文件信息,以方便再终端启动“scripts”: { “start”: “nodemon ./bin/www” }
  • 终端启动时输入npm start

model 下创建index.js用于连接数据库时的信息

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文件里的信息

  • 引入数据库连接
  • 引入路由模块
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();

// 连接数据库
const mongoose = require('mongoose'); // 引入 mongoose,用于连接数据库
mongoose.connect('mongodb://localhost:27017/runoob'); // 连接数据库

// 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传入并执行相应响应,?表示可能有id也可能没有id
  • 如果有id传入,按照id在数据库查找并返回对应的值
  • 没有则查找数据库所有的内容并返回

增加

  • 先初始化下form这里有三个参数代表允许上传一个文件,文件存放路径,保存原始文件后缀
  • form.parse(请求,回调)表示将req中内容交给form回调函数处理
  • fields里面包含普通文本信息,结构出来,files里面有文件信息,对象.的形式拿出来
  • 进行下非空验证,和用户名是否存在验证
  • 保存时需要对密码加密,这里采用bcrypt.hashSync(password,10)第一个参数要加密对象,第二个加密强度
  • 向数据库保存信息,成功后返回给客户端

修改

  • 通过/:_id拿到要修改对象的id信息
  • 执行修改,成功后返回成功信息

删除

  • 通过/:_id拿到删除对象id信息
  • 执行删除,成功后返回成功信息
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;

创建上传文件保存文件夹

文件夹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数据库上传文件的方法步骤的文章就介绍到这了,更多相关Node.js连接mongo上传文件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • node.js命令行教程图文详解

    node.js命令行教程图文详解

    本文先介绍原生的node.js实现命令行交互,了解原生的api,然后通过commander.js和inquirer.js实现一个完整的交互命令行工具。感兴趣的朋友跟随小编一起看看吧
    2019-05-05
  • 详解基于 Node.js 的轻量级云函数功能实现

    详解基于 Node.js 的轻量级云函数功能实现

    这篇文章主要介绍了详解基于 Node.js 的轻量级云函数功能实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • Node.js中的模块化,npm包管理器详解

    Node.js中的模块化,npm包管理器详解

    这篇文章主要介绍了node模块与npm包管理工具,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2021-09-09
  • Node.js Koa2使用JWT进行鉴权的方法示例

    Node.js Koa2使用JWT进行鉴权的方法示例

    这篇文章主要介绍了Node.js Koa2使用JWT进行鉴权的方法示例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-08-08
  • 使用Express处理请求和托管静态资源方式

    使用Express处理请求和托管静态资源方式

    这篇文章主要介绍了使用Express处理请求和托管静态资源方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-09-09
  • Node.js进行文件操作(读取/写入/修改/删除)详解

    Node.js进行文件操作(读取/写入/修改/删除)详解

    Node.js是一个神奇的东西,它可以让JavaScript在服务器端运行,让我们的很多前端程序员也能在后端大展身手了!本文就来讲讲如何在Node.js中进行文件操作:读取、写入、修改和删除文件吧
    2023-03-03
  • Windows下快速搭建NodeJS本地服务器的步骤

    Windows下快速搭建NodeJS本地服务器的步骤

    本篇文章主要介绍了Windows下快速搭建NodeJS本地服务器的步骤,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2017-08-08
  • 解决Mac node版本升级失败的问题

    解决Mac node版本升级失败的问题

    今天小编就为大家分享一篇解决Mac node版本升级失败的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-05-05
  • node使用mysql获取数据库数据中文乱码问题的解决

    node使用mysql获取数据库数据中文乱码问题的解决

    这篇文章主要介绍了node使用mysql获取数据库数据中文乱码问题的解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-12-12
  • 详解一个基于套接字实现长连接的express

    详解一个基于套接字实现长连接的express

    这篇文章主要介绍了详解一个基于套接字实现长连接的express,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03

最新评论