RT: app.post(’/views/validation.html’,function(req,res){ console.log(req.body); });
post 到这个页面的时候, 答应出undefiend; 客户端的form 代码如下: <form id=“text_form” method=“POST” action="/views/validation.html"> name:<input type=“text” id=“name”></ br> age:<input type=“text” id=“age”></ br> <input class=“submit” type=“submit” value=“提交”/> </form> 求 怎么获取post提交的数据
app.post? 你自己改写了吧。 不是router.post么。其他逻辑上没什么问题。
@MiguelValentine var app = express();用的是express
var express = require(‘express’); var router = express.Router(); router.post 这样试试
@MiguelValentine这样写的话 直接就找不到指定的页面了 估计应该是路由路径不对
@MiguelValentine 我看其他人的帖子都是用req.body 这样来获取Post过来的值,用过req.parmes 或者rqp.query来获取get过来的值,我自己测试过get过来的值 是可以获取到的,但是post过来的就是找不到
//app.js var routes = require(’…/route’); …… 在app.use(express.static(path.join(__dirname, ‘…/public’)));app.use(cookieParser(’*’));之后插入 app.use(router) // route/index.js var express = require(‘express’); var router = express.Router(); router.post(’/views/validation.html’,function(req,res){ console.log(req.body); });
@MiguelValentine 这是我server.js的全部代码 var express = require(‘express’); var ejs = require(‘ejs’); var sio = require(‘socket.io’); var app = express();
var urlrouter = require(‘urlrouter’); app.set(‘view engine’,‘html’); app.set(‘views’,__dirname+"/views"); app.set(‘view option’,{layout:false}); app.engine(’.html’, ejs.__express); app.use(express.static(__dirname+’/public’));
app.post(’/’,function(req,res,next){ if(req.query.name!=null) { //res.send(req.query.name); /res.json([{“name”:req.query.name,“id”:1,“age”:18},{“name”:“张三”,“id”:2,“age”:12}, {“name”:“Tmo”,“id”:3,“age”:13}, {“name”:“Jerry”,“id”:4,“age”:14}, {“name”:“Jim”,“id”:5,“age”:15}]);/ console.log(req.query.name); } else { res.send(‘err’); console.log(‘err’); } });
app.get('/',function(req,res,next){
res.render('index');
});
app.get('/views/*.html',function(req,res,next){
res.render(req.params[0]);
//console.log(req.query.id);
});
app.post('/views/validation.html',function(req,res,next){
console.log(req.query);
console.log(req.body);
});
/*var router = urlrouter(function (app) {
});*/
app.listen(3000);
里面app.get或者app.post 对应的代码块都是会执行的,唯一的问题就是post方法里面取值 取不到,刚才我根据别人的例子,把所有的请求代码放到 /*var router = urlrouter(function (app) {
});*/代码块中去,结果就是连首页都找不到了
var express = require(‘express’); var ejs = require(‘ejs’); var sio = require(‘socket.io’); var app = express();
var urlrouter = express.Router(); app.set(‘view engine’,‘html’); app.set(‘views’,dirname+"/views"); app.set(‘view option’,{layout:false}); app.engine(’.html’, ejs.express); app.use(express.static(__dirname+’/public’)); app.use(bodyParser.urlencoded({ extended: true })); app.use(bodyParser.json());
urlrouter.post(’/’,function(req,res){ if(req.query.name!=null) { console.log(req.query.name); } else { res.send(‘err’); console.log(‘err’); } });
urlrouter.get(’/’,function(req,res){ res.render(‘index’); }); urlrouter.get(’/views/*.html’,function(req,res){ res.render(req.params[0]); //console.log(req.query.id); });
urlrouter.post(’/views/validation.html’,function(req,res){ console.log(req.body); });
应用下bodyParser: app.use(bodyParser.urlencoded({ extended: true })); app.use(bodyParser.json());
@ciiii 卧槽正解。我都忘了。
@MiguelValentine 这是按你说的,整理以后的代码
var express = require(‘express’);
var ejs = require(‘ejs’);
var sio = require(‘socket.io’);
var app = express();
var urlrouter = express.Router();
app.set(‘view engine’,‘html’);
app.set(‘views’,__dirname+"/views");
app.set(‘view option’,{layout:false});
app.engine(’.html’, ejs.__express);
app.use(express.static(__dirname+’/public’));
urlrouter.post(’/’,function(req,res){
if(req.query.name!=null)
{
console.log(req.query.name);
}
else
{
res.send(‘err’);
console.log(‘err’);
}
});
urlrouter.get(’/’,function(req,res){
res.render(‘index’);
});
urlrouter.get(’/views/*.html’,function(req,res){
res.render(req.params[0]);
});
urlrouter.post(’/views/validation.html’,function(req,res){
console.log(req.body);
});
app.listen(3000);
这样写的话 我chmore http://localhost:3000/ 页面显示的就是Cannot GET /
@ciiii bodyParser这个是需要先npm 安装一下 然后require(‘bodyParser’)这样吗?
@MiguelValentine bodyParser是什么 ?
@hc2014 不要安装,直接引用。是EXPRESS的中间件。解析文件头的。
是一个connect,express的中间件。安装了express就有的吧
@ciiii 把你的那两句代码加进去以后 报错说是 bodyParser未定义。我刚才也翻了一下书,说bodyParser是conncet中间件的一个插件,然后我也安装了一下conncet 然后再用bodyParser 说是connect.bodyParser 方法未定义
@MiguelValentine ReferenceError: bodyParser is not defined at Object.<anonymous> (C:\Users\hc\Desktop\node\server.js:12:9) at Module._compile (module.js:456:26) at Object.Module._extensions…js (module.js:474:10) at Module.load (module.js:356:32) at Function.Module._load (module.js:312:12) at Function.Module.runMain (module.js:497:10) at startup (node.js:119:16) at node.js:906:3
@hc2014 可能版本不同, 我用的是express4 https://github.com/expressjs/body-parser
@ciiii { “name”:“express-tweet” ,“version”:“0.0.1” ,“dependencies”:{ “express”:“4.5.1” ,“ejs”:“0.4.2” ,“superagent”:“0.3.0” ,“connect”:“3.0.2” }
}
@ciiii @MiguelValentine 用express直接调用bodyparser 会报错说是没有这个方法,然后我安装了一个body-parser的组件。 运行正常了,可是获取到的req.body 为{}.
"cookie-parser": "~1.0.1",
"body-parser": "~1.0.0",
加进去之后在根目录 npm install一次
app.use(logger(‘dev’)); app.use(bodyParser.json()); app.use(bodyParser.urlencoded()); app.use(express.static(path.join(__dirname, ‘…/public’))); 这个顺序。加进去。
@MiguelValentine 有个问题非常的奇怪,我贴出代码 你看下 这个是我html的页面 <html> <head> <script language=“javascript” type=“text/javascript” src="/js/jquery.js"></script> <script language=“javascript” type=“text/javascript” src="/js/jquery.validate.min.js"></script> <link rel=“stylesheet” href=“css/ui.jqgrid.css”> <script type=“text/javascript” > $(function(){
$.ajax({
type: 'POST',
url: '/views/validation.html',
data: { name: "John", age: 18 },
success: function(data){
alert("Data Loaded: " + data);
},
dataType: 'text'
});
});
function fun()
{
$.ajax({
type: 'POST',
url: '/views/validation.html',
data: { name: "John", age: 18,address:"aaa" },
success: function(data){
alert("Data Loaded: " + data);
},
dataType: 'text'
});
}
</script> </head> <body> </body> <form id=“test_form” method=“POST” action="/views/validation.html"> name:<input type=“text” id=“name”></ br> age:<input type=“text” id=“age”></ br> <button onclieck=“fun()”> click</button> <input class=“submit” type=“submit” value=“提交”/> </form> </html>
用的Jquery 界面加载的时候就会执行一次$.ajax ,会发送一个{ name: “John”, age: 18 }数据目标页面 也就是本页面,然后对应的请求方法是: app.post(’/views/validation.html’,function(req,res,next){ console.log(“post”); console.log(req.body); }); 第一次会输出正确的数据。可是当我点击click按钮手动触发fun()函数的异步请求的时候,req.body显示为{}.诶,这个问题真心搞不懂了,如果可以的话我把代码发给你们,帮我看看吧
@MiguelValentine 真无奈了,为什么我的项目中都无法调用conncet下的中间件呢?刚才bodyparser,你刚才说的logger 都不行,然后我npm install logger,但是还是不行。把app.use(logger(‘dev’));注释掉以后,还是出现我刚才说的那样的问题,就页面第一次加载会有值,以后请求就没有
@hc2014 兄台,你的html里面的表单没有加name属性啊- - req.body当然为空啦。。。
<input type="text" id="name" name="name">
@hzbqjltx 哎呀,卧槽,没脸见人了,这真没脸见人了…总忘记了最基本的东西.
@hc2014 哥们你这个问题解决了没