Node.js 使用Express.js(multer)上传文件不起作用

Node.js 使用Express.js(multer)上传文件不起作用,node.js,express,multer,Node.js,Express,Multer,我正在尝试在express.js中使用multer实现文件上传,但文件没有在db中上传。有人能帮我吗 这是我的密码: csr.model.js const mongoose = require('mongoose'); const Schema = mongoose.Schema; const schema = new Schema({ commonName: { type: String }, orgName: { type: String }, orgUnit:

我正在尝试在express.js中使用multer实现文件上传,但文件没有在db中上传。有人能帮我吗

这是我的密码:

csr.model.js

  const mongoose = require('mongoose');
const Schema = mongoose.Schema;

const schema = new Schema({
    commonName: { type: String },
    orgName: { type: String },
    orgUnit: { type: String },
    city: { type: String },
    state: { type: String },
    country: { type: String },
    emailAdd: { type: String },
    file: { type: String },

}, { collection: 'csr' });



schema.set('toJSON', {
    virtuals: true,
    versionKey: false,
    transform: function (doc, ret) {
        delete ret._id;
        delete ret.hash;
    }
});

module.exports = mongoose.model('Csr', schema);
const express = require("express");
const router = express.Router();
const userService = require("./csr.service");
router.post("/fileupload",fileupload)

module.exports = router;

  function fileupload(req, res, next) {
    userService
  .fileupload()
  .then(() =>{
    //console.log(res);
   res.json({ success: true})})
  .catch((err) => next(err));
}
 const config = require("config.json");
const jwt = require("jsonwebtoken");
const bcrypt = require("bcryptjs");
const db = require("_helpers/db");
const crypto = require("../_helpers/crypto");
// var crypto = require("crypto");
var assert = require("assert");
var ObjectId = require("mongodb").ObjectId;
const { exec } = require("child_process");
const multer = require("multer");

const Csr = db.Csr;
module.exports = {
  fileupload
};



async function fileupload() {
    var storage = multer.diskStorage({
        destination: function(req, file, cb) {
          cb(null, "uploads/");
        },
        filename: function(req, file, cb)  {
          cb(null, `${Date.now()}_${file.originalname}`);
        },
        fileFilter: function(req, file, cb)  {
          const ext = path.extname(file.originalname);
          if (ext !== ".jpg" || ext !== ".png") {
            return cb(res.status(400).end("only jpg, png are allowed"), false);
          }
          cb(null, true);
        },
      });
    
      var upload = multer({ storage: storage }).single("file");
      var csr = new Csr();
      await csr.save();
      console.log(upload)
      return upload
  }
csr.controller.js

  const mongoose = require('mongoose');
const Schema = mongoose.Schema;

const schema = new Schema({
    commonName: { type: String },
    orgName: { type: String },
    orgUnit: { type: String },
    city: { type: String },
    state: { type: String },
    country: { type: String },
    emailAdd: { type: String },
    file: { type: String },

}, { collection: 'csr' });



schema.set('toJSON', {
    virtuals: true,
    versionKey: false,
    transform: function (doc, ret) {
        delete ret._id;
        delete ret.hash;
    }
});

module.exports = mongoose.model('Csr', schema);
const express = require("express");
const router = express.Router();
const userService = require("./csr.service");
router.post("/fileupload",fileupload)

module.exports = router;

  function fileupload(req, res, next) {
    userService
  .fileupload()
  .then(() =>{
    //console.log(res);
   res.json({ success: true})})
  .catch((err) => next(err));
}
 const config = require("config.json");
const jwt = require("jsonwebtoken");
const bcrypt = require("bcryptjs");
const db = require("_helpers/db");
const crypto = require("../_helpers/crypto");
// var crypto = require("crypto");
var assert = require("assert");
var ObjectId = require("mongodb").ObjectId;
const { exec } = require("child_process");
const multer = require("multer");

const Csr = db.Csr;
module.exports = {
  fileupload
};



async function fileupload() {
    var storage = multer.diskStorage({
        destination: function(req, file, cb) {
          cb(null, "uploads/");
        },
        filename: function(req, file, cb)  {
          cb(null, `${Date.now()}_${file.originalname}`);
        },
        fileFilter: function(req, file, cb)  {
          const ext = path.extname(file.originalname);
          if (ext !== ".jpg" || ext !== ".png") {
            return cb(res.status(400).end("only jpg, png are allowed"), false);
          }
          cb(null, true);
        },
      });
    
      var upload = multer({ storage: storage }).single("file");
      var csr = new Csr();
      await csr.save();
      console.log(upload)
      return upload
  }
csr.service.js

  const mongoose = require('mongoose');
const Schema = mongoose.Schema;

const schema = new Schema({
    commonName: { type: String },
    orgName: { type: String },
    orgUnit: { type: String },
    city: { type: String },
    state: { type: String },
    country: { type: String },
    emailAdd: { type: String },
    file: { type: String },

}, { collection: 'csr' });



schema.set('toJSON', {
    virtuals: true,
    versionKey: false,
    transform: function (doc, ret) {
        delete ret._id;
        delete ret.hash;
    }
});

module.exports = mongoose.model('Csr', schema);
const express = require("express");
const router = express.Router();
const userService = require("./csr.service");
router.post("/fileupload",fileupload)

module.exports = router;

  function fileupload(req, res, next) {
    userService
  .fileupload()
  .then(() =>{
    //console.log(res);
   res.json({ success: true})})
  .catch((err) => next(err));
}
 const config = require("config.json");
const jwt = require("jsonwebtoken");
const bcrypt = require("bcryptjs");
const db = require("_helpers/db");
const crypto = require("../_helpers/crypto");
// var crypto = require("crypto");
var assert = require("assert");
var ObjectId = require("mongodb").ObjectId;
const { exec } = require("child_process");
const multer = require("multer");

const Csr = db.Csr;
module.exports = {
  fileupload
};



async function fileupload() {
    var storage = multer.diskStorage({
        destination: function(req, file, cb) {
          cb(null, "uploads/");
        },
        filename: function(req, file, cb)  {
          cb(null, `${Date.now()}_${file.originalname}`);
        },
        fileFilter: function(req, file, cb)  {
          const ext = path.extname(file.originalname);
          if (ext !== ".jpg" || ext !== ".png") {
            return cb(res.status(400).end("only jpg, png are allowed"), false);
          }
          cb(null, true);
        },
      });
    
      var upload = multer({ storage: storage }).single("file");
      var csr = new Csr();
      await csr.save();
      console.log(upload)
      return upload
  }
当我返回console.log(上传)时,请指出这段代码中的错误。我在console中得到了这个[函数:multerMiddleware],并且console.log(存储)像这样返回DiskStorage{ getFilename:[函数:文件名], getDestination:[函数:目标]} 请有人给我建议解决办法


谢谢

为什么不返回“multer({storage:storage})”并像这样使用:route.post('/something',upload.single('avatar'),async(req,res,next)=>{}?你们为什么要把文件保存到数据库里呢?它可能会损害性能。请解释我需要如何更改代码。我需要在db中存储fie,这是要求。此问题与此类似。也许你可以在那里找到答案