Node.js 为什么req.body为空且req.files未定义

Node.js 为什么req.body为空且req.files未定义,node.js,express,Node.js,Express,我正在使用node和express,我正在尝试用表单上传一些文件和信息。问题是,当我试图从后端访问表单中的任何内容时,它是未定义的或为空的。当我使用req.body时,它是空的,当我尝试使用req.files时,它们是未定义的,所以我不知道该怎么做。代码如下: routerProgress.post("/home/upload-progress", (req, res) => { const user_id = req.user.id; console.log(

我正在使用node和express,我正在尝试用表单上传一些文件和信息。问题是,当我试图从后端访问表单中的任何内容时,它是未定义的或为空的。当我使用req.body时,它是空的,当我尝试使用req.files时,它们是未定义的,所以我不知道该怎么做。代码如下:

routerProgress.post("/home/upload-progress", (req, res) => {
  const user_id = req.user.id;
  console.log(req.body);
  const weight = req.body.weight;
  const front = req.files.front;
  const from_side = req.files.from_side;
  const backwards = req.files.backwards;
  let front_id = `${v4()}-${front.file.name}`;
  let from_side_id = `${v4()}-${from_side.file.name}`;
  let backwards_id = `${v4()}-${backwards.file.name}`; 
  const date = dateFormat(result.request_date, "yyyy-mm-dd");

  from.mv('../../uploads/images', front_id, (req, res) => {
    if (err) console.log(err);
    else console.log("File Uploaded");
  })

  from_side.mv('../../uploads/images', from_side_id, (req, res) => {
    if (err) console.log(err);
    else console.log("File Uploaded");
  })

  backwards.mv('../../uploads/images', backwards_id, (req, res) => {
    if (err) console.log(err);
    else console.log("File Uploaded");
  })

  const newProgress = new Progress ({
    user_id,
    weight,
    front_id,
    from_side_id,
    backwards_id,
    date
  })

  res.redirect("/home");
});
console.log仅为{},req.files.name_以_形式定义的_未定义

这是我的app.js

import express from 'express';
const app = express();
import path from 'path';
import sequelize from './db/db.js';
import { fileURLToPath } from 'url';
import flash from 'connect-flash';
import session from 'express-session';
import passport from 'passport';

const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);

// SERVER CONFIGURATION
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
  console.log(`Listening at ${PORT}`);
  sequelize.sync({ force: false })
    .then(() => console.log('Database Connected!'))
    .catch(err => console.log(err));
});

// VIEW SETTINGS
app.use(express.static(__dirname + "/public"));
app.set("view engine", "pug");
// app.engine('html', require('ejs').renderFile);
app.set('views', path.join(__dirname, "/public/views"));

// BODYPARSER
app.use(express.urlencoded({ extended: false }));
app.use(express.json());


// EXPRESS SESSION

app.use(session({
  secret: 'GymApp',
  resave: true,
  saveUninitialized: true
}));

// CONNECT FLASH
app.use(flash());


// PASSPORT MIDDLEWARE
import passportConfig from './config/passport.js';
passportConfig(passport);
app.use(passport.initialize());
app.use(passport.session());


// GLOBAL VAR
app.use((req, res, next) => {
  res.locals.success_msg = req.flash('success_msg');
  res.locals.error_msg = req.flash('error_msg');
  res.locals.error = req.flash('error');
  next();
});

// ROUTES
import { routerIndex } from './routes/index.js';
import { routerProgress } from './routes/app/progress.js';
import { routerAuthentication } from './routes/authentication.js';
import { routerHome } from './routes/app/home.js'

app.use(routerIndex);
app.use(routerProgress);
app.use(routerAuthentication);
app.use(routerHome);
这是用帕格做成的表格:

form(class="form add-form space-down" method="POST" enctype="multipart/form-data")
                div.title
                    h1 UPLOAD NEW PROGRESS 
                    div.form-group
                        label(for="weight") Weight: 
                        input(type="number" name="weight" class="form-control" placeholder="Enter your weight")
                    div.form-group
                        label(for="front") Upload a front photo 
                        input(type="file" name="front")
                    div.form-group
                        label(for="from_side") Upload a from side photo 
                        input(type="file" name="from_side")
                    div.form-group
                        label(for="backwards") Upload a backwards photo 
                        input(type="file" name="backwards")
                    div.button-container
                        button(type="submit" class="btn btn-primary btn-color space") Upload

如果有人知道我应该如何解决这个问题,我将非常感谢他。

为了访问
req.files
对象,您需要添加一个名为的特定中间件,该中间件允许此功能

只需运行
npm i express fileupload
,然后将其添加到您的
app.js
,如下所示:

const fileUpload=require('express-fileUpload');
app.use(fileUpload());
在特定的
app.js
中,您可以将其添加到其他中间件附近,例如:

从“express”导入express;
常量app=express();
从“路径”导入路径;
从“/db/db.js”导入sequelize;
从“url”导入{fileURLToPath};
从“连接闪存”导入闪存;
从“快速会话”导入会话;
从“护照”进口护照;
const\uu filename=fileURLToPath(import.meta.url);
const _dirname=path.dirname(_文件名);
//服务器配置
const PORT=process.env.PORT | 3000;
应用程序侦听(端口,()=>{
log(`listing at${PORT}`);
sync({force:false})
.then(()=>console.log('Database Connected!'))
.catch(err=>console.log(err));
});
//文件上传
const fileUpload=require('express-fileUpload');
app.use(fileUpload());
//查看设置
应用程序使用(express.static(uu dirname+“/public”);
应用程序集(“查看引擎”、“哈巴狗”);
//app.engine('html',require('ejs').renderFile);
app.set('views',path.join('u dirname,“/public/views”);
//体分析器
use(express.urlencoded({extended:false}));
使用(express.json());
//快速会议
应用程序使用(会话)({
秘密:“GymApp”,
雷萨夫:是的,
saveUninitialized:true
}));
//连接闪光灯
应用程序使用(flash());
//PASSPORT中间件
从“./config/passport.js”导入passportConfig;
passportConfig(passport);
app.use(passport.initialize());
app.use(passport.session());
//全局变量
应用程序使用((请求、恢复、下一步)=>{
res.locals.success_msg=req.flash('success_msg');
res.locals.error_msg=req.flash('error_msg');
res.locals.error=req.flash('error');
next();
});
//路线
从“./routes/index.js”导入{routerIndex};
从“./routes/app/progress.js”导入{routerProgress};
从“./routes/authentication.js”导入{routerAuthentication};
从“./routes/app/home.js”导入{routerHome}
应用程序使用(routerIndex);
应用程序使用(routerProgress);
应用程序使用(路由验证);
应用程序使用(routerHome);

在通过
app.use()
安装和实现中间件之后,现在应该可以访问
req.files
对象,因为您正确地从表单传递了文件。

您可以在问题中添加
app.js
代码吗?您是如何发送请求以及从何处发送请求的?请求格式正确吗?是的,我现在就做