如何使用Node.js+MongoDB开发RESTfulAPI接口(Node.js+Express...)上传API接口,使用Node.js+Express+MongoDB内置后端服务。本文详细介绍了通过Node.js与数据库的通信。整个服务搭建完成后,我们使用Postman来测试整个后端服务。我亲自测试了本教程中的每一段代码,以确保它100%没有错误。请打开您的终端并按照本教程进行操作。从这里开始,成为一名后端工程师。全栈实战教程:Vue+Node.js+Express+MySQL开发“待办事项”APPVue+Axios+Node.js+Express搭建“上传图片”带预览管理后台Vue+Axios+Node.js+Express搭建“文件上传”管理后台React+Nodejs搭建“上传图片/预览”管理后台带预览React+Axios+Node.js+Express搭建“文件上传”管理后台接口(Node.js+Express+Sequelize+MySQL)使用Node.js+MongoDB开发RESTfulAPI接口(Node.js+Express+MongoDB)如果你是搭建后台管理工具,不想处理前端问题,推荐Karayun,Karayun是一个新一代低代码开发工具,一键接入常用数据库和API,无需了解前端,只需拖拽即可快速搭建属于自己的后台管理工具。一周减为一天,详情见文末。?文件上传管理后台Node.js+Express+Multer+MongoDB我们使用Nodejs+Express+Multer+Mongodb搭建后台文件上传API后台接口。后端工程我们提供如下APIPOST/upload文件上传接口GET/files文件列表获取接口GET/files/[filename]下载指定文件后端工程结构├──README.md├──package.json├──pnpm-lock.yaml└──node_modules└──...└──src├──配置│└──db.js├──控制器│└──flileUploadController.js├──中间件│└──上传.js├──控制器──routes│└──index.js└──server.jssrc/db.js包含MongoDB和Multer的配置(url、数据库、文件桶)。middleware/upload.js:初始化MulterGridFs存储引擎(包括MongoDB),定义中间件函数。controllers/flileUploadController.js:配置RestAPIroutes/index.js:路由,定义前端如何请求后端执行一个空文件夹,然后cd进入该文件夹,这个文件夹就是我们的项目文件夹mkdirkalacloud-nodejs-mongodb-upload-filescdkalacloud-nodejs-mongodb-upload-files然后使用命令初始化项目,然后安装项目所需的依赖包,输入以下命令npminstallexpresscorsmultermulter-gridfs-storagemongodbpackage.js文件{"name":"kalacloud-nodejs-mongodb-upload-files","version":"1.0.0","description":"Node.js上传多个文件到MongoDB","main":"src/server.js","scripts":{"test":"echo\"Error:notestspecified\"&&exit1"},"keywords":["node","upload","multiple","files","mongodb"],"license":"ISC","dependencies":{"cors":"^2.8.5","express":"^4.17.1","mongodb":"^4.1.3","multer":"^1.4.3","multer-gridfs-storage":"^5.0.2"}}延伸阅读:《React Router 6 (React路由) 最详细教程》配置MongoDB数据库src/config/db.jsmodule.exports={url:"mongodb://localhost:27017/",database:"files_db",filesBucket:"photos",};中间件src/middleware/upload.jsconstutil=require("util");constmulter=require("multer");const{GridFsStorage}=require("multer-gridfs-storage");constdbConfig=require("../config/db");varstorage=newGridFsStorage({url:dbConfig.url+dbConfig.database,options:{useNewUrlParser:true,useUnifiedTopology:true},文件:(req,文件)=>{constmatch=["image/png","image/jpeg","image/gif"];if(match.indexOf(file.mimetype)===-1){constfilename=`${Date.现在()}-kalacloud-${file.originalname}`;返回文件名;}return{bucketName:dbConfig.filesBucket,filename:`${Date.now()}-kalacloud-${file.originalname}`};}});常量最大尺寸=2*1024*1024;varuploadFiles=multer({storage:storage,limits:{fileSize:maxSize}}).单(“文件”);varuploadFilesMiddleware=util.promisify(uploadFiles);module.exports=uploadFilesMiddleware;这里我们定义了一个存储配置对象GridFsStorageurl:必须是一个标准的MongoDB连接字符串,指向MongoDB数据库。multer-gridfs-storage模块会自动为你创建一个mongodb连接。options:自定义连接的建立方式file:这个是控制文件在数据库中存储的功能。该函数的返回值是一个具有以下属性的对象:filename、metadata、chunkSize、bucketName、contentType……我们还检查文件是否为图像文件.mimetype。bucketName表示文件将存储在photos.chunks和photos.files集合中。接下来,我们使用multer模块初始化中间件util.promisify()并使导出的中间件对象与async-await.single()一起使用。带参数的函数是输入标签的名称。这里使用MulterAPI来限制上传文件的大小。添加limits:{fileSize:maxSize}来限制文件大小扩展阅读:《最好的 6 个 React Table 组件详细亲测推荐》创建文件上传控制器controllers/fileUploadController.js该文件主要用于文件上传。我们创建一个名为upload的函数,导出这个函数我们使用文件上传中间件函数处理上传的文件,使用Multer捕获相关错误并返回响应文件列表数据获取和下载getListFiles:该函数主要获取photos.files并返回url,namedownload():接收文件名作为入参,从mongodb内置的开放下载流GridFSBucket,再通过response.write(chunk)API将文件传给客户端。constupload=require("../middleware/upload");constdbConfig=require("../config/db");constMongoClient=require("mongodb").MongoClient;constGridFSBucket=require("mongodb").GridFSBucket;consturl=dbConfig.url;constbaseUrl="http://localhost:8080/files/";constmongoClient=newMongoClient(url);constuploadFiles=async(req,res)=>{try{awaitupload(req,res);if(req.file==undefined){returnres.status(400).send({message:"请选择要上传的文件"});}returnres.status(200).send({message:"文件上传成功"+req.file.originalname,});}赶上(错误){console.log(错误);if(error.code=="LIMIT_FILE_SIZE"){returnres.status(500).send({message:"文件大小不能超过2MB",});}returnres.status(500).send({message:`无法上传文件:,${error}`});}};constgetListFiles=async(req,res)=>{试试{等待mongoClient.connect();constdatabase=mongoClient.db(dbConfig.database);constfiles=database.collection(dbConfig.filesBucket+".files");让fileInfos=[];if((awaitfiles.estimatedDocumentCount())===0){fileInfos=[]}letcursor=files.find({})awaitcursor.forEach((doc)=>{fileInfos.push({name:doc.filename,url:baseUrl+doc.filename,});});返回res.status(200).send(fileInfos);}catch(error){returnres.status(500).send({message:error.message,});}};constdownload=async(req,res)=>{try{awaitmongoClient.connect();constdatabase=mongoClient.db(dbConfig.database);constbucket=newGridFSBucket(数据库,{bucketName:dbConfig.filesBucket,});让downloadStream=bucket.openDownloadStreamByName(req.params.name);downloadStream.on("data",function(data){returnres.status(200).写(数据);});downloadStream.on("error",function(err){returnres.status(404).send({message:"无法获取文件"});});下载流。on("end",()=>{returnres.end();});}赶上(错误){返回资源。状态(500)。发送({消息:错误。消息,});}};module.exports={uploadFiles,getListFiles,下载,};延伸阅读:《React Draggable 实现拖拽 - 最详细中文教程》定义路由在routes文件夹下,使用ExpressRouter在index.js中定义路由constexpress=require("express");constrouter=express.Router();constuploadController=require("../controllers/fileUploadController");letroutes=app=>{router.post("/upload",uploadController.uploadFiles);router.get("/files",uploadController.getListFiles);router.get("/files/:name",uploadController.download);返回app.use("/",router);};module.exports=路由;POST/upload:调用uploadFiles控制器的函数GET/files获取/files图片列表。GET/files/:name下载带有文件名的图像。创建Express服务器constcors=require("cors");constexpress=require("快递");constapp=express();global.__basedir=__dirname;varcorsOptions={origin:"http://localhost:8081"};app.use(cors(corsOptions));constinitRoutes=require("./routes");app.use(express.urlencoded({扩展:true}));initRoutes(app);letport=8080;app.listen(port,()=>{console.log(`Runningatlocalhost:${port}`);});这里我们导入Express和Cors,Express用于构建RestapiCors提供Express中间件以使用各种选项启用CORS。创建一个Express应用程序,然后添加cors中间件,并使用一种方法在端口8080上侦听传入请求。运行项目并测试它。在项目根目录下的终端中输入命令nodesrc/server.js。控制台显示Runningatlocalhost:8080。使用postman工具测试,项目运行正常。终端“上传文件”管理后台完成。Node.js后端“文件上传”源代码您可以在我们的github上下载完整的Node.js后端“文件上传”源代码。如果你还没有弄明白,别着急,直接使用Karayun,不需要懂任何前后端技术,只需一个命令,你就可以快速生成包括“文件上传”管理在内的任何后台管理工具简单的鼠标拖动。“文件上传”和喀喇云前后端搭建总结本教程将教你如何用React前端+Node.js后端搭建“文件上传”管理工具。如果你一步一步跟着,你一定已经运行了演示。但如果你能使用最新的低代码开发工具“Karayun”,你就完全不需要那么繁琐了。只需1分钟,您就可以打造属于自己的“文件上传”管理工具。立即激活卡拉云,直接从侧边工具栏拖拽组件到页面,生成上传组件和文件管理工具。1分钟搞定“上传文件”管理工具。我们来看看卡拉云的Demo案例。下面是用卡拉云搭建的数据库CURD后台管理系统。只需拖放组件,10分钟内即可完成搭建。可以直接分享给同事一起使用:https://my.kalacloud.com/apps/8z9z3yf9fy/publishedKalacloud可以帮助您快速搭建企业内部工具。下图是使用Kalacloud搭建的内部广告监控系统,无需了解前端,只需拖拽组件,10分钟搞定。您还可以快速构建一套属于您的后台管理工具。KaraCloud是新一代的低代码开发平台。与Vue、React等前端框架相比,KaraCloud的优势在于无需先搭建开发环境,注册后即可直接使用。开发人员根本不需要处理任何前端问题。只需拖拽即可快速生成所需组件,一键访问常用数据库和API。根据指导,简单几步就可以打通前后端。数周的开发时间缩短为1小时。立即免费试用KaraCloud。全栈实战教程:Vue+Node.js+Express+MySQL开发“待办事项”APPVue+Axios+Node.js+Express搭建“上传图片”带预览管理后台Vue+Axios+Node.js+Express搭建“文件上传”管理后台React+Nodejs搭建带预览的“上传图片/预览”管理后台React+Axios+Node.js+Express搭建“文件上传”管理后台Node.js+Express+Sequelize+MySQL)使用Node.js+MongoDB开发RESTfulAPI接口(Node.js+Express+MongoDB)
