Express 如何解决node.js中的中间件验证问题

Express 如何解决node.js中的中间件验证问题,express,middleware,Express,Middleware,我正在用node.js和express开发一个网页。我正在尝试使用node.js中间件处理验证 该网页使用node.js中间件验证表单,当用户在没有输入任何值的情况下单击create post时,表单将在不执行任何操作的情况下重新加载同一页面。 我已经通过将打印到控制台“middleware works”的console.log(“middleware works”)放入控制台,确认了中间件的路径是正确的。但如果把代码放在检查用户输入上,屏幕上就会出现错误 'index.js' const p

我正在用node.js和express开发一个网页。我正在尝试使用node.js中间件处理验证

该网页使用node.js中间件验证表单,当用户在没有输入任何值的情况下单击create post时,表单将在不执行任何操作的情况下重新加载同一页面。 我已经通过将打印到控制台“middleware works”的console.log(“middleware works”)放入控制台,确认了中间件的路径是正确的。但如果把代码放在检查用户输入上,屏幕上就会出现错误

'index.js' 
const path = require('path');
const express = require('express');
const bodyParser = require('body-parser');
const Post = require('./database/models/Post');
const fileUpload = require("express-fileupload");
const app = new express();

mongoose.connect('mongodb://localhost/node-js-test-blog', {useNewUrlParser: true })
app.use(express.static('public'));
app.use(expressEdge);
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.use(fileUpload());

//this is the middleware that is supposed to check an empty field and return the page posts/new as an empty page. if I remove the code and console.log("middleware works"), it outputs middleware works but on putting the code it generated the error below
module.exports = (req, res, next) => {
if (!req.files.image || !req.body.username || !req.body.title || !req.body.description || !req.body.content) {
    return res.redirect('/posts/new')
}

next()
}


//this is the route to the form page
app.post('/posts/store', (req, res) => {
const { image } = req.files

image.mv(path.resolve(__dirname, 'public/posts', image.name), (error) => {

    Post.create({
        ...req.body,
        image: `/posts/${image.name}`
    }, (error, post) => {
        res.redirect("/");
    });
})
});
app.listen(4000, () => {
console.log("application listening on port 4000")
})
}

“错误”
TypeError:无法读取null的属性“image”
在module.exports(C:\Users\JERRY\Desktop\NODE-JS-BLOG\middleware\storePost.JS:3:20)
在Layer.handle[作为handle\u请求](C:\Users\JERRY\Desktop\NODE-JS-BLOG\NODE\u modules\express\lib\router\Layer.JS:95:5)
在trim_前缀处(C:\Users\JERRY\Desktop\NODE-JS-BLOG\NODE_modules\express\lib\router\index.JS:317:13)
在C:\Users\JERRY\Desktop\NODE-JS-BLOG\NODE\u modules\express\lib\router\index.JS:284:7
在Function.process_参数处(C:\Users\JERRY\Desktop\NODE-JS-BLOG\NODE_modules\express\lib\router\index.JS:335:12)
下一步(C:\Users\JERRY\Desktop\NODE-JS-BLOG\NODE\u modules\express\lib\router\index.JS:275:10)
在公共汽车上。(C:\Users\JERRY\Desktop\NODE-JS-BLOG\NODE\u modules\express fileupload\lib\processMultipart.JS:82:5)
在Busboy.emit(events.js:208:15)
在Busboy.emit(C:\Users\JERRY\Desktop\NODE-JS-BLOG\NODE\u modules\Busboy\lib\main.JS:38:33)
在C:\Users\JERRY\Desktop\NODE-JS-BLOG\NODE\u modules\busboy\lib\types\multipart.JS:52:13
在处理和拒绝时(内部/process/task_queues.js:75:11)

检查您实际上传的文件,如果您不检查,中间件将因未检查req.files而停止,并且req.body也已设置(所有其他路由将不会发布或上传)如果文件为空,中间件也将抛出此错误,您必须检查req.files是否为空,它不应该是
文件[0]
?谢谢,它可以工作,但我没有使用文件[0],我必须添加
!请求文件
到我已经存在的验证和
!req.files.image
也保持不变,并且可以正常工作。它现在正在检查是否未添加任何文件,是否未选择任何图像,并按预期返回空页面
  'the error'
 TypeError: Cannot read property 'image' of null
at module.exports (C:\Users\JERRY\Desktop\NODE-JS-BLOG\middleware\storePost.js:3:20)
at Layer.handle [as handle_request] (C:\Users\JERRY\Desktop\NODE-JS-BLOG\node_modules\express\lib\router\layer.js:95:5)
at trim_prefix (C:\Users\JERRY\Desktop\NODE-JS-BLOG\node_modules\express\lib\router\index.js:317:13)
at C:\Users\JERRY\Desktop\NODE-JS-BLOG\node_modules\express\lib\router\index.js:284:7
at Function.process_params (C:\Users\JERRY\Desktop\NODE-JS-BLOG\node_modules\express\lib\router\index.js:335:12)
at next (C:\Users\JERRY\Desktop\NODE-JS-BLOG\node_modules\express\lib\router\index.js:275:10)
at Busboy.<anonymous> (C:\Users\JERRY\Desktop\NODE-JS-BLOG\node_modules\express-fileupload\lib\processMultipart.js:82:5)
at Busboy.emit (events.js:208:15)
at Busboy.emit (C:\Users\JERRY\Desktop\NODE-JS-BLOG\node_modules\busboy\lib\main.js:38:33)
at C:\Users\JERRY\Desktop\NODE-JS-BLOG\node_modules\busboy\lib\types\multipart.js:52:13
at processTicksAndRejections (internal/process/task_queues.js:75:11)