Javascript 无法读取属性';长度';未定义的玉石
我是nodejs的新手,通过构建一个小项目(博客)来学习它,在提交add post表单详细信息时遇到下面提到的问题。我还为addPost.jade和post.js添加了代码Javascript 无法读取属性';长度';未定义的玉石,javascript,node.js,express,Javascript,Node.js,Express,我是nodejs的新手,通过构建一个小项目(博客)来学习它,在提交add post表单详细信息时遇到下面提到的问题。我还为addPost.jade和post.js添加了代码 TypeError: E:\Web projects\NodeJs projects\nodeBlog\views\addpost.jade:19 17| label Category: 18| select.form-control(name='categor
TypeError: E:\Web projects\NodeJs projects\nodeBlog\views\addpost.jade:19
17| label Category:
18| select.form-control(name='category')
> 19| each cat, i in catList
20| option(value = '#{cat.title}') #{cat.title}
21| .form-group
22| label Body:
Cannot read property 'length' of undefined
at eval (eval at <anonymous> (E:\Web projects\NodeJs projects\nodeBlog\node_modules\jade\lib\index.js:218:8), <anonymous>:210:31)
at eval (eval at <anonymous> (E:\Web projects\NodeJs projects\nodeBlog\node_modules\jade\lib\index.js:218:8), <anonymous>:247:4)
at eval (eval at <anonymous> (E:\Web projects\NodeJs projects\nodeBlog\node_modules\jade\lib\index.js:218:8), <anonymous>:383:22)
at res (E:\Web projects\NodeJs projects\nodeBlog\node_modules\jade\lib\index.js:219:38)
at Object.exports.renderFile (E:\Web projects\NodeJs projects\nodeBlog\node_modules\jade\lib\index.js:380:38)
at Object.exports.renderFile (E:\Web projects\NodeJs projects\nodeBlog\node_modules\jade\lib\index.js:370:21)
at View.exports.__express [as engine] (E:\Web projects\NodeJs projects\nodeBlog\node_modules\jade\lib\index.js:417:11)
at View.render (E:\Web projects\NodeJs projects\nodeBlog\node_modules\express\lib\view.js:126:8)
at tryRender (E:\Web projects\NodeJs projects\nodeBlog\node_modules\express\lib\application.js:639:10)
at EventEmitter.render (E:\Web projects\NodeJs projects\nodeBlog\node_modules\express\lib\application.js:591:3)
at ServerResponse.render (E:\Web projects\NodeJs projects\nodeBlog\node_modules\express\lib\response.js:960:7)
at E:\Web projects\NodeJs projects\nodeBlog\routes\post.js:89:6
at Layer.handle [as handle_request] (E:\Web projects\NodeJs projects\nodeBlog\node_modules\express\lib\router\layer.js:95:5)
at next (E:\Web projects\NodeJs projects\nodeBlog\node_modules\express\lib\router\route.js:131:13)
at Immediate.<anonymous> (E:\Web projects\NodeJs projects\nodeBlog\node_modules\multer\lib\make-middleware.js:53:37)
at runCallback (timers.js:655:20)
post.js文件
var express = require('express');
var router = express.Router();
var mongo = require('mongodb');
var db = require('monk')('localhost/nodeblog');
var multer = require('multer');
var uploads = multer({ dest: './public/images/uploads' });
/* home page blog Post. */
router.get('/add', function(req, res, next) {
var categoryList = db.get('categories');
categoryList.find({},{}, function (err, categoryList) {
/*console.log("Categories"+categories);
categories.forEach(function(category){
console.log(category.title);
});*/
res.render('addPost',{
"title": "Add Post",
"catList" : categoryList
});
});
});
router.post('/add', uploads.single('mainimage'), function(req, res, next) {
// get form values
var title = req.body.title;
var category = req.body.category;
var body = req.body.body;
var author = req.body.author;
var date = new Date();
console.log("Title"+title);
console.log("Category"+category);
console.log("body"+body);
console.log("Author"+author);
console.log("Date"+date);
//Check for image field
if(req.files && req.files.mainimage){
console.log('Uploading file...');
var mainImageOrginalName = req.files.mainimage.originalname;
var mainImageName = req.files.mainimage.name;
var mainImageMime = req.files.mainimage.mimetype;
var mainImagePath = req.files.mainimage.path;
var mainImageExt = req.files.mainimage.extension;
var mainImageSize = req.files.mainimage.size;
}
else{
console.log('mainImageFile not found....');
var mainImageName = 'noimage.png';
}
//form Validations
req.checkBody('title','Title field is required').notEmpty();
req.checkBody('body','Body field is required').notEmpty();
var errors = req.validationErrors();
if(errors){
res.render('addPost',{
"errors": errors,
"title" : title,
"body" : body
});
}else{
var posts = db.get('posts');
// add it to db
posts.insert({
"title":title,
"body":body,
"category": category,
"date":date,
"author":author,
"mainimage":mainImageName
}, function (err, post) {
if(err){
res.send('There was an issue submitting the post');
}else{
req.flash('success', "Post Submitted");
req.location('/');
req.redirect('/');
}
});
}
res.render('addpost',{
"title": "Add Post"
});
});
module.exports = router;
请帮助我解决这个问题,因为我被困于此
附言:也有帖子被添加
谢谢问题出在这个代码部分
//表单验证
req.checkBody('title','title字段为必填项')。notEmpty();
req.checkBody('body','body字段为必填项')。notEmpty();
var errors=req.validationErrors();
如果(错误){
//编辑
find({},{},函数(err,categoryList){
res.render('addPost'{
“错误”:错误,
“头衔”:头衔,
“身体”:身体
“catList”:类别列表
});
});
}否则{
var posts=db.get('posts');
//将其添加到数据库中
posts.insert({
“头衔”:头衔,
“身体”:身体,
“类别”:类别,
“日期”:日期,
“作者”:作者,
“mainimage”:mainImageName
},函数(错误,post){
如果(错误){
res.send(“提交帖子时出现问题”);
}否则{
请求flash(“成功”,“提交后”);
请求位置('/');
请求重定向('/');
}
});
}
//具体来说,就是这个
res.render('addpost'{
“标题”:“添加帖子”
});代码>我已经解决了问题,谢谢你的帮助。我已经注释了代码//具体到这个res.render('addpost',{“title”:“addpost”});和需求位置('/');请求重定向('/');这应该是res.location(“/”)和res.redirect(“/”)什么??那么,在地球上,你为什么要写那些代码,而你却可以很容易地把它注释掉呢?它甚至有目的吗?我之所以写这段代码,是因为我在提交时遇到了呈现页面的问题。后来我发现是位置和重定向的错误。而且我不是一个刚开始学习的专家。你好@Tolsee,我还是有麻烦。由于没有填写所有必填字段,我无法在重新加载页面后查看类别值。正在显示验证消息,但不存在类别值。
var express = require('express');
var router = express.Router();
var mongo = require('mongodb');
var db = require('monk')('localhost/nodeblog');
var multer = require('multer');
var uploads = multer({ dest: './public/images/uploads' });
/* home page blog Post. */
router.get('/add', function(req, res, next) {
var categoryList = db.get('categories');
categoryList.find({},{}, function (err, categoryList) {
/*console.log("Categories"+categories);
categories.forEach(function(category){
console.log(category.title);
});*/
res.render('addPost',{
"title": "Add Post",
"catList" : categoryList
});
});
});
router.post('/add', uploads.single('mainimage'), function(req, res, next) {
// get form values
var title = req.body.title;
var category = req.body.category;
var body = req.body.body;
var author = req.body.author;
var date = new Date();
console.log("Title"+title);
console.log("Category"+category);
console.log("body"+body);
console.log("Author"+author);
console.log("Date"+date);
//Check for image field
if(req.files && req.files.mainimage){
console.log('Uploading file...');
var mainImageOrginalName = req.files.mainimage.originalname;
var mainImageName = req.files.mainimage.name;
var mainImageMime = req.files.mainimage.mimetype;
var mainImagePath = req.files.mainimage.path;
var mainImageExt = req.files.mainimage.extension;
var mainImageSize = req.files.mainimage.size;
}
else{
console.log('mainImageFile not found....');
var mainImageName = 'noimage.png';
}
//form Validations
req.checkBody('title','Title field is required').notEmpty();
req.checkBody('body','Body field is required').notEmpty();
var errors = req.validationErrors();
if(errors){
res.render('addPost',{
"errors": errors,
"title" : title,
"body" : body
});
}else{
var posts = db.get('posts');
// add it to db
posts.insert({
"title":title,
"body":body,
"category": category,
"date":date,
"author":author,
"mainimage":mainImageName
}, function (err, post) {
if(err){
res.send('There was an issue submitting the post');
}else{
req.flash('success', "Post Submitted");
req.location('/');
req.redirect('/');
}
});
}
res.render('addpost',{
"title": "Add Post"
});
});
module.exports = router;