关于req.body的问题
发布于 9 年前 作者 zhuwen1 4503 次浏览 最后一次编辑是 8 年前 来自 问答

之前在网上说req.body访问不到内容,网上评论说可能是因为body-parser未使用的原因,然而使用这个方法之后没有用,下面是我的代码 这是我的入口文件目录为C:\Users\zhuwen\Desktop\xx2\xx2\app.js

var express = require('express');
var app = express();
var port = process.env.PORT||3000;
var bodyParser = require('body-parser');
var MongoClient = require('mongodb').MongoClient;
var routes = require('./routes');
var port = process.env.PORT||3000;
var url = "mongodb://127.0.0.1:27017/test";
var index = require("./routes/index.js");

MongoClient.connect(url,function(err,db){
   app.set('views','./views');

   app.set('view engine','ejs');
   app.use(bodyParser.urlencoded({extended:false}));

   app.use('/',index(db));

   app.listen(port,function(){
      console.log("server at port "+ port);
   })
})

这个是我的路由文件目录为C:\Users\zhuwen\Desktop\xx2\routes\index.js

var Router = require('express').Router();
module.exports = function(db){
	Router.get('/',function(req,res){
	 res.render('index', {success: 0});

	})
	// Router.get('/resgister',function(req,res){
	// 	res.render('post');
	// })
	/*Route*/
	Router.get('/post',function(req,res){
		res.render('post');
	})
	Router.post('/xx',function(req,res){
		console.log(req.body);
			db.collection('artcle')
			.insert({artcle:req.body.postTitle,context:req.body.postContext})
			})
	Router.post('/login',function(req,res){
		console.dir(req.body);
		db.collection('users')
		.find({username:req.body.username,password:req.body.password},{_id:0},{limit:0})
		.toArray(function(err,docs){
			console.dir(docs);
			console.log(docs.length);
			if(docs.length){
				console.log("登陆成功");
				res.render("post");
			}
			else{
				console.log("登陆失败");
				res.redirect('.');
			}
		})
	})
	Router.post('/resgister',function(req,res){
		console.dir(req.body);
		db.collection('users')
		.find({username:req.body.username},{_id:0},{limit:0})
		.toArray(function(err,docs){
			console.dir(docs);
			console.log(docs.length);
	if(docs.length){
			/*res.send("register failed");*/
			//res.redirect('.');
			res.render('index', {success: 1});
			/*res.redirect('post');	*/	
			/*res.redirect('http://www.baidu.com');*/
		}
			else{
			//res.end("register scucessed");
			res.render('post');
		db.collection('users')
			.insert({username:req.body.username,password:req.body.password})
		}
		})
	

	})
	return Router;
}

如果只是所有的req.body失效的话,那很正常,但是问题是第15行的req.body无效,其他是有效的 这是我的view文件夹下的两个文件 这是index.ejs目录C:\Users\zhuwen\Desktop\xx2\views\index.ejs

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>index</title>
</head>
<body>
<style>
	.login{
		font-size:16px;
	}
</style>
	<div>
		<div class="login">登陆页面</div>
		<form action="/" method="post" id="test">
			用户名:<input type="text" name="username"><br/>
			密码:<input type="password" name="password"><br/>
			<input type="button" value="登陆" onclick="log()">
			<input type="button" value="注册" onclick="res()">
			<% if(success==2){ %>
			<div>注册成功</div>
			<% }else if(success==1){ %>
			<div>注册失败</div>
			<% }%>
		</form>
	</div>
	<script>
	function log () {
		// body...
		/*location.href='http://www.baidu.com';*/
		document.getElementById('test').action="/login";
		document.getElementById('test').submit();
	}
	function res () {
		// body...
		/*location.href='http://www.sogou.com*/
		document.getElementById('test').action="/resgister";
		document.getElementById('test').submit();

}
	</script>
</body>
</html>

这个是post.ejs 目录C:\Users\zhuwen\Desktop\xx2\views\post.ejs

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>post</title>
</head>
<body>
<div class="post-artcle">发表文章</div>
<form action="/post" method="post" id="postartcle"></form>
	标题:<input type="text" name="postTitle">
	内容:<input type="text" name="postContext">
	<input type="button" value="登陆" onclick="postArtcle()">
<script>
	function postArtcle(){
	document.getElementById('postartcle').action="/xx";
	document.getElementById('postartcle').submit();
}
</script>
</body>
</html>
4 回复

在线等

能格式化一下么?

楼主。。。

<div class="post-artcle">发表文章</div>
<form action="/post" method="post" id="postartcle"></form>

你这显然是一个空表吧,怎么能指望服务端能接收到任何东西? chrome和firefox都有developer toolbar,你按一下f12就行了,然后在 network 里面,一般有个 preserve log,把这个勾上,这样每条请求会被纪录。点一下相应的请求,就可以看到实际上提交的是什么样的 query string, form data, header 什么的。通过这个方法,可以先确认是客户端的问题还是服务器的问题。

@klesh 我去果然是一个空表,好丢人,居然是这样的错误

回到顶部