Moh*_*rab 3 javascript node.js express
我已经开始学习node.js用express的框架,当我张贴的形式是这样的:
router.get('/add-product',(req,res,next)=>{
res.send('<form action="/product" method="POST" ><input type="text" name="title" /><button type="submit">Submit</button></form>');
});
router.post('/product',(req,res,next)=>{
console.log(req.body);
res.redirect('/');
});
Run Code Online (Sandbox Code Playgroud)
当我这样做console.log(req.body)时显示:
[Object: null prototype] { title: 'product' }
Run Code Online (Sandbox Code Playgroud)
而不只是 { title: 'product' }
我想知道这是否实际上是express的错误,或者只是最近添加的express的专有性,原因是我下载了去年创建的另一个项目,并且当我console.log(req.body)显示相同的输出时,它使用了相同的方法。
在此先感谢您的帮助。
Tan*_*eem 20
尝试这个,
const obj = JSON.parse(JSON.stringify(req.body)); // req.body = [Object: null prototype] { title: 'product' }
console.log(obj); // { title: 'product' }
Run Code Online (Sandbox Code Playgroud)
快乐编码...!
小智 11
您可以Object.assign通过以下方式解决您的问题:
const obj = Object.assign({},req.body)
console.log(obj)
Run Code Online (Sandbox Code Playgroud)
它初始化一个新对象并为其Object.prototype分配所有属性。req.body
Onu*_*gul 10
我遇到了一些问题,我的终端向我展示了以下解释
body-parser deprecated undefined extended: provide extended option at express
我用这个
app.use(bodyParser.urlencoded({extended: false}))
或者
您正在运行 4.16+ 的 Express 版本,然后只需键入
app.use(express.urlencoded({extended: true}))
我认为它可以帮助你
要了解有关扩展选项的更多信息,请阅读文档或此处有人回答得很好 - express 4.0 中的“扩展”是什么意思?
因为该对象是基于 Null 对象的。我发现最好的方法是去掉这个,例如,如果您需要测试的精确匹配,则使用:
const groups = {...match.groups} // remove null object for test comparison
Run Code Online (Sandbox Code Playgroud)
那实际上是好的设计。默认情况下,对象继承Object.prototype包含一些助手(.toString(),.valueOf())。现在,如果您使用req.body并且没有向HTTP请求传递任何参数,那么您将期望req.body为空。如果只是“常规对象”,则不会是:
req.body.toString();
Run Code Online (Sandbox Code Playgroud)
有一种方法可以创建“空对象”,即没有任何属性/原型的对象Object.create(null)。您正在控制台中看到这些对象之一。
所以不,这不是需要修复的错误,那就是对JS功能的充分利用。
下面的代码对我有用
app.use(express.urlencoded({ extended : true }));
app.use(express.json());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3330 次 |
| 最近记录: |