req.body 没有给出这个名字
req.body does not give the name
我使用第三方插件(多个和wmd编辑器)制作了一个表单。我的HTML是:
<form id="form" class="form" method="post" action="/questions">
<div id="title" class="form__title">
<div id="question_title">Title</div>
<input id="input_element1" class="input_element" type="text" placeholder="What's your programming question? Be specific." name="title">
</div>
<div class="text-area">
<div id="wmd-button-bar"></div>
<br/>
<textarea id="wmd-input" name="text"></textarea>
<div id="wmd-preview"></div>
<br/>
</div>
<div class="inputtags form__tags">
<select id="options" multiple="multiple" name="tags">
</select>
<div class="inputtags__element"></div>
<div class="inputtags__errors"></div>
<br>
<div id="inputtags__post">
<button class="btn" id="btn-submit">
Post Your Question
</button>
<button class="btn" id="btn-discard">
Discard
</button>
</div>
</div>
</form>
我将标签放在使用javascript选择的选项中,javaScript代码是:
var index = -1;
var htmlStr = tags.reduce(function(a,b){
index++;
return a + "<option value="+(index+1)+" name="+b+">"+b+"</option>";
},'');
$("#options").html(htmlStr);
我正在我的节点的路由文件中获取这些.js(快速框架)作为:
router.post('/questions', function(req,res){
var question = req.body;
console.log(question);
Question.createQuestion(question);
res.redirect('/');
});
在这里,req.body 应该按照 expressjs 文档中的建议给我 DOM 的名称。我已经在我的 javascript 代码中为我的选项命名,但当数据被推送到数据库时,req.body 会返回我以下内容:
{
title: 'title',
text: '<p>Body</p>',
tags: [ '1', '2', '3', '4', '5', '6', '7', '8' ]
}
我在应用程序中的代码.js:
var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var session = require('express-session');
var mongoose = require('mongoose');
var passport = require('passport');
var flash = require('connect-flash');
我做错了什么?
由于您使用的是数值<option value="+(index+1)+"
这就是您得到的。
对于["foo","bar baz"]
,您的代码会产生:<option value=1 name=foo>foo</option><option value=2 name=bar baz>bar baz</option>
这是非常糟糕的 html 代码,会将1
和2
作为值发送。
如果要将标记字符串用作值,请将其更改为
return a + "<option value='"" + b + "'">" + b + "</option>";
获取<option value="foo">foo</option><option value="bar baz">bar baz</option>
,并在服务器上["foo", "bar baz"]
req.body.tags
。
我从option
中删除了 name
属性,因为它不执行任何操作(您已经为 select 标签定义了name
)。
只有在定义了标签的情况下才应该这样做,切勿将不受信任的用户输入作为 html 代码插入!
这是来自express-generator
生成的样板express
的一部分
var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var routes = require('./routes/index');
var users = require('./routes/users');
var app = express();
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
// uncomment after placing your favicon in /public
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.text());
//rest of the code
并在user
路由器文件中
var express = require('express');
var router = express.Router();
router.post('/questions', function(req, res) {
res.status(200).json(req.body);
});
如果您使用 POSTMAN 对/users/questions
进行POST
调用并按JSON
传递您的数据,您将获得它,因为我只是将其作为响应吐出。不要忘记在请求标头中设置Content-Type: application/json
。对于文件上传,您可以尝试 multer 或 busboy
有关body-parser
的更多信息,请查看正文解析器
- 节点.js快速删除 req.body 不起作用
- 在node.jsexpress应用程序中,req.body没有得到<text区域>价值
- 如何从未定义的表单中获取req.body
- post-router的req.body包含新行和冒号
- req.body使用MEAN Express 4.x和Node.js未定义
- 如何在js源节点上将数组作为req.body发送
- Sails.js req.files为空,req.body.image未定义
- 从中间件通过 req.body 传递变量
- express.js req.body 始终为空
- Reactjs req.body shows [object Object]
- req.body 没有给出这个名字
- 无法确定 req.body.name 的值 - 快速节点 JS
- 隐藏/禁用字段从 req.body 中消失(Express JS bodyParser)
- 将 req.body 属性复制到猫鼬模型中时出错
- Express 4 Multer / req.body 和 res.json 未定义
- 节点.JS req.body 字符串太长
- Express API - 验证 req.body 元素
- Nodejs - Req.body 未定义在 post 中,带有快速 4.9.0
- 我无法从nodejs + expressjs中的req.body获取数据
- Express Multer 文件上传 req.body 和 req.file 未定义