TypeError: Невозможно прочитать свойство 'name' неопределенного узла js - PullRequest
0 голосов
/ 22 апреля 2019

У меня есть форма отправки файла в файле index.html.Когда файл выбран, мне нужно сказать «файл загружен», в противном случае необходимо отобразить «пожалуйста, загрузите файл»

app.js

    const express = require("express");
    const app = express();
    const http = require("http").Server(app).listen(3000);

    app.use(express.urlencoded());
    app.use(express.json());

    console.log("Server Started");

    app.get("/", function (req, res) {
    res.sendFile(__dirname + "/index.html");
    }
    )

    app.post("/", function (req, res) {
    if (req.files) {

        console.log(req.files);
        const file = req.files.filename;
        const filename = file.name;

        if (!filename) {
        res.send("Please select the file to upload");
        }
        else {
        res.send("uploaded");
        }
    }
    })

index.html

    <div>
    <h1 style="align-content: center">Upload your file here!</h1>
    </div>
    <div >

    <form label="upload" method="post" enctype="multipart/form-data" action="/">
        <label> Enter reference</label>
        <input type="text" name="test_text"></input>
        <br><br>
        <input type="file" name="filename">
        <input type="submit" value="upload">
    </form>
    </div>

Сообщение об ошибке:

TypeError: Cannot read property 'name' of undefined
    at C:\Users\Desktop\LocalGithub\uploadFileLocal-express-fileupload\app.js:24:27

Ответы [ 2 ]

2 голосов
/ 22 апреля 2019

Следующие цитаты приведены в экспресс-документах:

В Express 4 файл req.files больше не доступен для объекта req по умолчанию.Чтобы получить доступ к загруженным файлам в объекте req.files, используйте промежуточное программное обеспечение для многочастной обработки, такое как busboy, multer, грозный, multiparty, connect-multiparty или pez.

Как уже говорилось, я предлагаю вам использовать multer , поскольку он более популярен и прост в использовании

РЕДАКТИРОВАТЬ:

Если вы используете промежуточное ПО "express-fileupload", вам необходимо загрузитьчерез .use() метод:

const express = require("express");
const app = express();
const http = require("http").Server(app).listen(3000);
const fileUpload = require('express-fileupload');
^^^^^

app.use(express.urlencoded());
app.use(express.json());

app.use(fileUpload({
^^^
    useTempFiles : true,
    tempFileDir : '/tmp/'
}));

...

проверьте документы для более подробной информации:

0 голосов
/ 22 апреля 2019

Пожалуйста, попробуйте заменить file.name на req.files[0].originalname.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...