Node.js 未定义的多个文件名
我正在编写一个网站就像博客,我们可以添加图片和文章。我正在使用multer、mongodb和multer。但我得到一个错误,说 TypeError:无法读取C:\Users\agul\Desktop\NODEJS\veritabanı\routes\articles处未定义的属性“filename”。js:58:33 因此,可能是因为找不到filenme属性,我无法上载图像。但我不明白为什么它不起作用 这是我的密码: 这是我的文章。jsNode.js 未定义的多个文件名,node.js,mongodb,image,express,multer,Node.js,Mongodb,Image,Express,Multer,我正在编写一个网站就像博客,我们可以添加图片和文章。我正在使用multer、mongodb和multer。但我得到一个错误,说 TypeError:无法读取C:\Users\agul\Desktop\NODEJS\veritabanı\routes\articles处未定义的属性“filename”。js:58:33 因此,可能是因为找不到filenme属性,我无法上载图像。但我不明白为什么它不起作用 这是我的密码: 这是我的文章。js const express = require('ex
const express = require('express');
const router = express.Router();
const multer = require('multer');
// Article Model
let Article = require('../models/article');
// User Model
let User = require('../models/user');
router.get('/sonuc', function(req, res){
if(req.query.search) {
const regex = new RegExp(escapeRegex(req.query.search), 'gi');
Article.find({"title": regex}, function(err, articles) {
if(err) {
console.log(err);
} else {
res.render("sonuc", {
articles: articles
});
}
});
}
});
function escapeRegex(text) {
return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&");
};
// Add Route
router.get('/add', ensureAuthenticated, function(req, res){
res.render('add_article', {
title:'Add Article'
});
});
const upload = multer({dest: __dirname + '/public/uploadss'});
// Add Submit POST Route
router.post('/add',upload.single('img'), function(req, res){
req.checkBody('title','Title is required').notEmpty();
//req.checkBody('author','Author is required').notEmpty();
req.checkBody('body','Body is required').notEmpty();
// Get Errors
let errors = req.validationErrors();
if(errors){
res.render('add_article', {
title:'Add Article',
errors:errors
});
} else {
var article = new Article({
title: req.body.title,
author: req.user._id,
img: '/uploads/' + req.file.filename,
body: req.body.body,
});
article.save(function(err){
if(err){
console.log(err);
return;
} else {
res.render('add_article', {
});
}
});
}
});
// Load Edit Form
router.get('/edit/:id', ensureAuthenticated, function(req, res){
Article.findById(req.params.id, function(err, article){
/*if(article.author != req.user._id){
req.flash('danger', 'Not Authorized');
return res.redirect('/');
}*/
res.render('edit_article', {
title:'Edit Article',
article:article
});
});
});
// Update Submit POST Route
router.post('/edit/:id', function(req, res){
let article = {};
article.title = req.body.title;
article.author = req.body.author;
article.body = req.body.body;
let query = {_id:req.params.id}
Article.update(query, article, function(err){
if(err){
console.log(err);
return;
} else {
req.flash('success', 'Article Updated');
res.redirect('/');
}
});
});
// Delete Article
router.delete('/:id', function(req, res){
if(!req.user._id){
res.status(500).send();
}
let query = {_id:req.params.id}
Article.findById(req.params.id, function(err, article){
if(article.author != req.user._id){
res.status(500).send();
} else {
Article.remove(query, function(err){
if(err){
console.log(err);
}
res.send('Success');
});
}
});
});
// Get Single Article
router.get('/:id', function(req, res){
Article.findById(req.params.id, function(err, article){
//User.findById(article.author, function(err, user){
res.render('article', {
article:article,
//author: user.name
});
});
});
//});
// Access Control
function ensureAuthenticated(req, res, next){
if(req.isAuthenticated()){
return next();
} else {
req.flash('danger', 'Please login');
res.redirect('/users/login');
}
}
module.exports = router;
同时,我还构建了img和文章的猫鼬模型。一切似乎都是正确的,但我不明白我在哪里犯了错误。你能帮忙吗?如果可以的话,我真的很感激。我已经创建了一个名为uploads的文件夹,我将filnemane定向为/uploads,但它不起作用
注意:THİS是我的add_article.pug文件。
扩展布局
block content
h1 #{title}
form(method='POST', action='/articles/add')
#form-group
label Title:
input.form-control(name='title', type='text')
#form-group
label Author:
input.form-control(name='author', type='text')
#form-group
label Body:
textarea.form-control(name='body')
.file-field.input-field(method="post", enctype="multipart/form-data")
.btn.grey
label File
input(name='img', enctype = "multipart/form-data", type='file')
br
input.btn.btn-primary(type='submit',value='Submit')
这是我的article.pug文件
extends layout
block content
br
h1= article.title
//h5 Written by #{author}
p= article.body
img(src='{article.img}', alt='img')
hr
if user
if user.id ==article.author
a.btn.btn-default(href='/articles/edit/'+article._id) Edit
a.btn.btn-danger.delete-article(href='#',data-id=article._id) Delete
未定义文件名的问题已经解决了,但现在我无法将我的img表示到我的文章页面。您能帮我解决这个问题吗?在尝试访问文件属性之前,您需要检查文件是否已上载
if (!req.file) {
// return error response
}
let filename = req.file.filename
您还需要验证请求内容类型是否为multipart/form data在尝试访问文件属性之前,您需要检查文件是否已上载
if (!req.file) {
// return error response
}
let filename = req.file.filename
您还需要验证请求内容类型是否为多部分/表单数据
enctype = "multipart/form-data"
以你的形式
这是文件
您添加了什么
enctype = "multipart/form-data"
以你的形式
这是文件
您需要添加
enctype = "multipart/form-data"
在表单标签中
更改您当前的代码
form(method='POST', action='/articles/add')
进入
并从输入文件中删除
当前
.file-field.input-field(method="post" , enctype="multipart/form-data")
.btn.grey
label File
input(name='img', enctype = "multipart/form-data", type='file')
变成
.file-field.input-field(method="post")
.btn.grey
label File
input(name='img', type='file')
参考:(见基本用法)
=====
要在html中提供文件以供使用/调用,您需要从express发送该文件
例如:
因为您的上传路径位于
/public/uploadss
您的article.js需要添加类似这样的代码
router.use(express.static('public/uploadss'))
注意:您的上载文件夹是uploads
,而不是uploads
然后,为了进行测试,您可以使用url打开浏览器并检查其是否有效
还可以创建虚拟路径前缀
router.use('/static', express.static('public/uploadss'))
所以你可以像这样访问它
参考:您需要添加
enctype = "multipart/form-data"
在表单标签中
更改您当前的代码
form(method='POST', action='/articles/add')
进入
并从输入文件中删除
当前
.file-field.input-field(method="post" , enctype="multipart/form-data")
.btn.grey
label File
input(name='img', enctype = "multipart/form-data", type='file')
变成
.file-field.input-field(method="post")
.btn.grey
label File
input(name='img', type='file')
参考:(见基本用法)
=====
要在html中提供文件以供使用/调用,您需要从express发送该文件
例如:
因为您的上传路径位于
/public/uploadss
您的article.js需要添加类似这样的代码
router.use(express.static('public/uploadss'))
注意:您的上载文件夹是uploads
,而不是uploads
然后,为了进行测试,您可以使用url打开浏览器并检查其是否有效
还可以创建虚拟路径前缀
router.use('/static', express.static('public/uploadss'))
所以你可以像这样访问它
参考资料:是的,我做到了。它是多部分的/是我做的。它是多部分/格式我的添加文章。pug是:。文件字段.输入字段(method=“post”,enctype=“multipart/form data”).btn.grey span文件输入(name='img',enctype=“multipart/form data”,type='file')br…嘿,我编辑了它。你能再看一遍吗?(在主帖中)。我的add_article.pug是:。文件字段.输入字段(method=“post”,enctype=“multipart/form data”).btn.grey span文件输入(name='img',enctype=“multipart/form data”,type='file')br…嘿,我编辑了它。你能再看一遍吗?(在主帖子中)。是的,它解决了未定义的问题,但我还是坚持在我的article.pug文件中表示图像。你能再看看我的主要帖子吗?因为我会添加article.pug文件。你能帮忙吗pls@AlpErenGül请检查我编辑的答案。这应该可以解决您的问题啊,它解决了未定义的问题,但我仍然坚持在我的article.pug文件中表示图像。你能再看看我的主要帖子吗?因为我会添加article.pug文件。你能帮忙吗pls@AlpErenGül请检查我编辑的答案。这会解决你的问题