bub*_*ord 0 node.js express multer
正如标题所暗示的,error: {"message": "ENOENT: no such file or directory, open 'E:\\astrology\\utils\\uploads\\1600798534862qf.png'"}
即使在通过了所有必需的配置之后,我还是会进入我的项目。
注意:我将“app”分为两部分:主要的“app.js”和“appRoute.js”是为了更动态和更清晰的代码。
应用程序.js
const express = require("express");
const path = require("path");
const app = express();
const directory = path.join(__dirname, "utils/uploads");
app.use("/uploads", express.static(directory));
require("./config/database/db")();
require("./config/approutes/appRoutes")(app);
module.exports = app;
Run Code Online (Sandbox Code Playgroud)
appRoute.js
require("dotenv").config();
const morgan = require("morgan");
const bodyParser = require("body-parser");
const cors = require("cors");
const productRoutes = require("../../api/routes/products");
module.exports = function (app) {
app.use(morgan("dev"));
app.use(bodyParser.urlencoded({ extended: true, limit: "100mb" }));
app.use(bodyParser.json());
app.use(cors({ credentials: true, origin: true }));
app.use("/products", productRoutes);
app.use((req, res, next) => {
const error = new Error("Not found");
error.status = 404;
next(error);
});
app.use((error, req, res, next) => {
console.log('SHOW ERROR', error);
res.status(error.status || 500);
res.json({
error: {
message: error.message,
},
});
});
};
Run Code Online (Sandbox Code Playgroud)
文件上传.js
const multer = require("multer");
const storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, __dirname + "/uploads");
},
filename: function (req, file, cb) {
cb(null, Date.now() + file.originalname.replace(/\s+/g, "-"));
},
});
const fileFilter = (req, file, cb) => {
// reject a file
if (file.mimetype === "image/jpeg" || file.mimetype === "image/png") {
cb(null, true);
} else {
cb(null, false);
}
};
const upload = multer({
storage,
limits: {
fileSize: 1024 * 1024 * 5,
},
fileFilter: fileFilter,
});
module.exports = upload;
Run Code Online (Sandbox Code Playgroud)
Product.js(控制器)
exports.create_product = async (req, res, next) => {
const { title, min_content, content } = req.body;
console.log("req files", req.files);
try {
const product = new Product({
title,
min_content,
content,
});
const new_product = await product.save();
console.log("error caught", new_product);
if (new_product) {
res.status(201).json({ msg: "New product added", new_product });
} else {
res.status(400).json({ msg: "Unable to create new product" });
}
} catch (error) {
res.status(500).json({ msg: "Internal server error", error });
}
};
Run Code Online (Sandbox Code Playgroud)
Product.js(路由)
const express = require("express");
const router = express.Router();
const ProductController = require("../controllers/products");
const uploadMW = require("../middleware/fileUpload");
router.get("/all", ProductController.get_products);
router.post("/new", uploadMW.fields([{ name: "thumbnail" }, { name: "image" }]), ProductController.create_product
);
module.exports = router;
Run Code Online (Sandbox Code Playgroud)
目录结构
我的操作系统是 windows,所以我已经包含了从文件名替换 (:) 的配置,但似乎没有任何东西对我有用。任何解决相同问题的帮助表示赞赏。
app.js 文件将是这样的
// modules =================================================
var express = require('express');
var app = express();
const logger = require('morgan');
var bodyParser = require('body-parser');
const indexRouter = require("./routes/index");
const cors = require('cors');
const path = require("path");
config = require("./environments/index");
var http = require('http').Server(app);
// configuration ===========================================
var port = config.PORT || 8081; // set our port
app.use(bodyParser.json({ limit: '50mb' }));
app.use(bodyParser.urlencoded({
limit: '50mb',
extended: true,
parameterLimit: 50000
}));
app.use(cors());
app.use(logger('dev'))
app.use("/api", indexRouter);
app.use(express.static(path.join(__dirname, "/build")));
http.listen(port, () => {
console.log('Magic happens on port ' + port); // shoutout to the user
});
exports = module.exports = app;
Run Code Online (Sandbox Code Playgroud)
在您的应用程序中创建 multerhelper.js 文件并在其中添加以下代码
const multer = require('multer');
// const fs = require('fs');
let fs = require('fs-extra');
let storage = multer.diskStorage({
destination: function (req, file, cb) {
let path = `/uploads`;
fs.mkdirsSync(path);
cb(null, __dirname + path);
},
filename: function (req, file, cb) {
// console.log(file);
cb(null, Date.now() + file.originalname.replace(/\s+/g, "-"));
}
})
var upload = multer({ storage: storage });
let createUserImage = upload.single('images');
let multerHelper = {
createUserImage,
}
module.exports = multerHelper;
Run Code Online (Sandbox Code Playgroud)
在您的product.js
(路由)文件中导入此文件
const multerhelper = require("../multerhelper.js");
router.post("/new",multerhelper.createUserImage,ProductController.
create_product);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
326 次 |
最近记录: |