Javascript TypeError:无法读取属性';名称';node.js中未定义上传文件的数量

Javascript TypeError:无法读取属性';名称';node.js中未定义上传文件的数量,javascript,node.js,Javascript,Node.js,我有一个我一直在解决的问题,我只是按照Tutorialpoints中的代码进行操作,但是控制台给了我这个错误 TypeError: Cannot read property 'name' of undefined at /Users/kimmmmy/Documents/Node.js Playground/fileupload/server.js:18:48 at Layer.handle [as handle_request] (/Users/kimmmmy/node_modu

我有一个我一直在解决的问题,我只是按照
Tutorialpoints
中的代码进行操作,但是控制台给了我这个错误

TypeError: Cannot read property 'name' of undefined
    at /Users/kimmmmy/Documents/Node.js Playground/fileupload/server.js:18:48
    at Layer.handle [as handle_request] (/Users/kimmmmy/node_modules/express/lib/router/layer.js:95:5)
    at next (/Users/kimmmmy/node_modules/express/lib/router/route.js:137:13)
    at Route.dispatch (/Users/kimmmmy/node_modules/express/lib/router/route.js:112:3)
    at Layer.handle [as handle_request] (/Users/kimmmmy/node_modules/express/lib/router/layer.js:95:5)
    at /Users/kimmmmy/node_modules/express/lib/router/index.js:281:22
    at Function.process_params (/Users/kimmmmy/node_modules/express/lib/router/index.js:335:12)
    at next (/Users/kimmmmy/node_modules/express/lib/router/index.js:275:10)
    at Immediate.<anonymous> (/Users/kimmmmy/node_modules/multer/lib/make-middleware.js:53:37)
    at runCallback (timers.js:706:11)
这是我的密码: server.js

var express = require('express');
var app     = express();
var fs      = require('fs');

var bodyParser = require('body-parser');
var multer     = require('multer');

app.use(express.static('public'));
app.use(bodyParser.urlencoded({extended: false}));
app.use(multer({dest: __dirname + '/tmp/'}).any());

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

app.post('/uploadfile', function(req, res) {
    console.log(req.files);
    var file = __dirname + '/' + req.files.file.name;

    fs.readFile(req.files.file.path, function(error, data) {
        if (error) throw error;
        fs.writeFile(file, data, function(error, data) {
            if (error) throw error;
            var result = {
                message: 'Uploaded.',
                filename: req.body.file.name
            };

            console.log(result);

            res.end(JSON.stringify(result));
        });
    });
});

app.listen(8080, function() {
    console.log('app is running ...');
});
我的html文件代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <form action="/uploadfile" method="post" enctype="multipart/form-data">
        <label>
            <h2>Select a file:</h2>
            <input type="file" name="file">
            <input type="submit" value="Ok">
        </label>
    </form>
</body>
</html>

文件
选择一个文件:

可能是因为属性是
filename
而不是
file.name

app.post('/uploadfile', function(req, res) {
    console.log(req.files);
    /*  Right here */
    var file = __dirname + '/' + req.files.file.name;
    /***************/

    fs.readFile(req.files.file.path, function(error, data) {
        if (error) throw error;
        fs.writeFile(file, data, function(error, data) {
            if (error) throw error;
            var result = {
                message: 'Uploaded.',
                filename: req.body.file.name
            };

            console.log(result);

            res.end(JSON.stringify(result));
        });
    });
});

另外,似乎
req
是一个数组,因此在调用任何属性之前,您可能必须访问该数组的第一个元素,
req.files[0]。filename
而不是
req.files。filename

您的回答帮助了我,但似乎是将文件名更改为随机的字母和数字,比如
94641d6de684c4a885c612c4f084c124
,我尝试了
req.files[0]。原始名称
,但它不起作用。因为如果发生这种情况,如果我想根据自己的意愿更改文件名怎么办?@kim dev你所说的
req.files[0]是什么意思.originalname
不起作用,出了什么问题?如果我使用
文件名
,它将移动到具有不同文件名的文件夹中,如下所示
94641d6de684c4a885c612c4f084c124
,但是如果我使用
originalname
它会给我一个未定义的名称,并将其上载到目标文件夹之外。如果您想为其指定一个您选择的名称,请更改
var file=\uu dirname+'/'+req.files.file.name
转换为在
'/'
之后选择的字符串,
var file=\uu dirname+'/'+req.files[0]。originalname
如果您希望它是原始名称,并确保将
fs.readFile(req.files.file.path,
更改为
fs.readFile(req.files[0].path,
app.post('/uploadfile', function(req, res) {
    console.log(req.files);
    /*  Right here */
    var file = __dirname + '/' + req.files.file.name;
    /***************/

    fs.readFile(req.files.file.path, function(error, data) {
        if (error) throw error;
        fs.writeFile(file, data, function(error, data) {
            if (error) throw error;
            var result = {
                message: 'Uploaded.',
                filename: req.body.file.name
            };

            console.log(result);

            res.end(JSON.stringify(result));
        });
    });
});