为什么我的ctx.request.files没有定义,而ctx.request.body没问题?

问题描述 投票:0回答:1

我正在尝试使用koa-body从我的简单表单解析数据,但是在后处理请求中,我只能访问ctx.request.body,而不能访问ctx.request.files。我正在尝试几种方法来解决此问题,但仍无法解决,无论如何ctx.request.files为空。根据此示例编写代码:koa-body/examples/multipart.js 。有代码:

reg.js

const router = require('koa-router')();
const bodyParser = require('koa-body')({multipart:true});

router.post('/reg', bodyParser,  async (ctx) => {
        console.dir(ctx.request);
});

module.exports = router;

reg.pug

     form(method='POST' action='/reg')
                    label Логин
                    input(type="text" id="login" name="login")
                    label Почта
                    input(type="text" name="mail")
                    label Пароль
                    input(type="password" name="password")
                    label Специализация
                    input(type="text" name="specialism")
                    label Пол
                    select(name="sex")
                        option(value="male") Мужрской
                        option(value="female") Женский
                    label Фото
                    input(type="file" name="image")
                    button(type="submit" value="Sign up") Sign Up

app.js

const Koa = require('koa');
const Pug = require('koa-pug');
const serve = require('koa-static');
const path = require('path');
const logger = require('koa-morgan');

const mongoDB = require('./config/database');
const homeRoute = require('./routes/home');
const regRoute = require('./routes/reg');

const app = new Koa();

// Connection to Mongoose
mongoDB.connect();

app.use(logger('dev'));

// Error-middleware handler
app.use(async(ctx, next) => {
    try {
        await next();
        const status = ctx.status || 404;
        if (status === 404) {
            ctx.throw(404)
        }
    } catch (err) {
        ctx.status = err.status || 500;
        pug.locals.status = ctx.status;
        if (ctx.status === 404) {
            //Your 404.jade
            await ctx.render('404error', pug.locals)
        } else {
            //other_error jade
            await ctx.render('index', pug.locals)
        }
    }
});

app.use(serve(`${__dirname}/public`));

const pug = new Pug({
    viewPath: path.resolve(__dirname, './views'),
    locals: { },
    app: app
});

app.use(homeRoute.routes());
app.use(regRoute.routes());

app.listen(3000, function(){
    console.log('Server running on https://localhost:3000')

这就是ctx.request.body包含的内容:

 body: {
    login: 'check',
    mail: '123',
    password: '123',
    specialism: 'check',
    sex: 'male',
    image: 'SnWyoGZWgDA.jpg'
  }
node.js post koa
1个回答
1
投票

我在一个新项目中遇到了同样的问题。这是新版本的[[koa-body中的一个问题。我将koa-body版本从“ ^ 4.1.1”更改为“ ^ 2.5.0”。现在工作正常。

更新使用命令:

npm remove koa-body

安装旧版本:

npm install [email protected]

现在它将正常工作。
© www.soinside.com 2019 - 2024. All rights reserved.