javascript - 无法读取 null 的属性“图像”
问题描述
无法在 module.exports 读取 null 的属性“图像”
module.exports = (req, res, next) => {
if (!req.files.image) {
return res.redirect('/posts/new')
}
next()}
index.js:
const express = require('express')
const app = new express()
const path = require('path')
const expressEdge = require('express-edge')
const mongoose = require('mongoose')
const bodyParser = require('body-parser')
const Post = require('./database/models/Post')
const fileUpload = require('express-fileupload')
mongoose.connect('mongodb://localhost/node-js-blog', { useNewUrlParser: true })
app.use(express.static('public'))
app.use(fileUpload())
app.use(expressEdge)
app.set('views', `${__dirname}/views`)
app.use(bodyParser.json())
app.use(bodyParser.urlencoded({extended : true}))
const storePost = require('./middleware/storePosts')
app.use('/posts/store', storePost)
app.get('/',async (req, res)=>{
const posts = await Post.find({})
console.log(posts)
res.render('index',{
posts
})
})
app.get('/about', (req,res)=>{
res.render('about')
})
app.get('/post/:id', async (req,res)=>{
const post = await Post.findById(req.params.id)
res.render('post',{
post
})
})
app.get('/contact', (req,res)=>{
res.render('contact')
})
app.get('/posts/new', (req,res)=>{
res.render('create')
})
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(3000, ()=>{
console.log('start server')
})
创建边缘:
<div class="form-group mt-5">
<input type="file" name="image" class="form-control-file">
</div>
当我使用 middleware.js 标题不插入图像时,当用户不上传图像文件并返回 TypeError 时,它给了我这个错误:无法在 module.exports (/home/mohamedessam/Desktop/NodeJs/middleware/ 读取属性'image' of null) storePosts.js:2:20) 在 Layer.handle [as handle_request] (/home/mohamedessam/Desktop/NodeJs/node_modules/express/lib/router/layer.js:95:5) 在 trim_prefix (/home/mohamedessam/ Desktop/NodeJs/node_modules/express/lib/router/index.js:317:13) 在 /home/mohamedessam/Desktop/NodeJs/node_modules/express/lib/router/index.js:284:7 在 Function.process_params ( /home/mohamedessam/Desktop/NodeJs/node_modules/express/lib/router/index.js:335:12)在下一个(/home/mohamedessam/Desktop/NodeJs/node_modules/express/lib/router/index.js:275 :10) 在 urlencodedParser (/home/mohamedessam/Desktop/NodeJs/node_modules/body-parser/lib/types/urlencoded.js:100:7) 在 Layer.handle [as handle_request] (/home/mohamedessam/Desktop/NodeJs/ node_modules/express/lib/router/layer.js:95:5) 在 trim_prefix (/home/mohamedessam/Desktop/NodeJs/node_modules/express/lib/router/index.js:317:13) 在 /home/mohamedessam/ Desktop/NodeJs/node_modules/express/lib/router/index.js:284:7 在 Function.process_params (/home/mohamedessam/Desktop/NodeJs/node_modules/express/lib/router/index.js:335:12) 在下一个 (/home/mohamedessam/Desktop/NodeJs/node_modules/express/lib/router/index.js:275:10) 在 jsonParser (/home/mohamedessam/Desktop/NodeJs/node_modules/body-parser/lib/types/json .js:119:7) 在 Layer.handle [as handle_request] (/home/mohamedessam/Desktop/NodeJs/node_modules/express/lib/router/layer.js:95:5) 在 trim_prefix (/home/mohamedessam/Desktop/NodeJs/node_modules/express/lib/router/index.js:317:13) 在 /home/mohamedessam/Desktop/NodeJs/node_modules/express/lib/路由器/index.js:284:7。
解决方案
那是因为您总是直接检查子属性image
,但在某些时候您没有设置req.files
它的嵌套位置。由于req.files
不存在,它返回一个 null 类型,javascript 无法解析。
您首先需要在 javascript 中检查所有父键是否单独存在,以测试对象中是否存在嵌套键。以下应该解决问题:
if (!(req.files && req.files.image))
推荐阅读
- kubernetes-helm - 如何创建一个模板依赖于另一个模板的舵图
- javascript - 如何在 R Shiny 中查询元素
- sql-server - Docker 上的 LocalDb V11.0
- javascript - 在浏览器控制台中为特定单词着色
- r - 计算一起购买的产品
- java - 在困难的场景中有效地保持 Java 集合排序
- javascript - 调用和调用函数之间有区别吗?
- javascript - 如何根据 div 宽度将类应用于 div?
- excel - 当单元格公式结果更改时,如何修复 msgbox 显示两次?
- gstreamer - 如何使用 GStreamer 0.10 将 mp4 filesrc 流式传输到 rtspsink