之前在网上说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>
在线等
能格式化一下么?
楼主。。。
<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 我去果然是一个空表,好丢人,居然是这样的错误