Node.js 使用Express.js(multer)上传文件不起作用
我正在尝试在express.js中使用multer实现文件上传,但文件没有在db中上传。有人能帮我吗 这是我的密码: csr.model.jsNode.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:
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,这是要求。此问题与此类似。也许你可以在那里找到答案