upload.single()
анализирует поток данных и сохраняет в виде файла на основе конфигурации.В вашем случае он будет искать поле filename
во входящем запросе и сохранит файл в папке uploads/
.Метаданные файла доступны в req.file
объекте.Вы можете просто набрать console.log(req.file)
, чтобы просмотреть информацию.
Чтобы прочитать содержимое файла, вы можете использовать поле req.file.path
.Вот как:
const fs = require("fs");
const path = require("path");
/** In the controller */
const absolutePath = path.join(__dirname, req.file.path);
const jsonString = fs.readFileSync(absolutePath, "utf-8");
const jsonObject = JSON.parse(jsonString);
console.log(jsonObject);
Вот как будет выглядеть полный server.js
:
const express = require("express");
const multer = require("multer");
const fs = require("fs");
const path = require("path");
const upload = multer({
dest: "uploads/" // "uploads"
});
const app = express();
app.get("/", (req, res) => {
res.sendFile(__dirname + "/index.html");
});
const route = express.Router();
route.post("/import", upload.single("filename"), (req, res, next) => {
console.log(req.file);
const absolutePath = path.join(__dirname, req.file.path);
const jsonString = fs.readFileSync(absolutePath, "utf-8");
const jsonObject = JSON.parse(jsonString);
console.log(jsonObject);
res.redirect("/");
});
app.use(route);
app.listen(3000);
Я добавил некоторые части, которые отсутствовали в вашем фрагменте (например, express.Router
).Хотя они могут отличаться.