为什么我需要写JSON.parse(JSON.stringify(data))
Why do I need to write JSON.parse(JSON.stringify(data))?
我正在写一个Node.js web应用程序,使用Express作为框架和Nunjucks作为模板引擎。
应用程序的一部分是将表单数据作为电子邮件发送。在此过程中编译包含表单数据的Nunjucks模板,然后将其发送到电子邮件服务器。
表单数据是一个JSON对象(req.body
),但由于一些奇怪的原因,我需要像这样提交表单数据:
const renderer = nunjucks.configure('/path/to/template');
renderer.render('template.html', JSON.parse(JSON.stringify(req.body)));
简单地写renderer.render('template.html', req.body);
不工作,它抛出一个错误:
TypeError: ctx.hasOwnProperty is not a function
at Obj.extend.init (D:'Projects'vcs.vitra.com'node_modules'nunjucks'src'environment.js:338:20)
at new new_cls (D:'Projects'vcs.vitra.com'node_modules'nunjucks'src'object.js:46:28)
at Obj.extend.render (D:'Projects'vcs.vitra.com'node_modules'nunjucks'src'environment.js:473:23)
at D:'Projects'vcs.vitra.com'node_modules'nunjucks'src'environment.js:311:35
at createTemplate (D:'Projects'vcs.vitra.com'node_modules'nunjucks'src'environment.js:234:25)
at handle (D:'Projects'vcs.vitra.com'node_modules'nunjucks'src'environment.js:249:25)
at D:'Projects'vcs.vitra.com'node_modules'nunjucks'src'environment.js:263:21
at next (D:'Projects'vcs.vitra.com'node_modules'nunjucks'src'lib.js:207:13)
at Object.exports.asyncIter (D:'Projects'vcs.vitra.com'node_modules'nunjucks'src'lib.js:214:5)
at Obj.extend.getTemplate (D:'Projects'vcs.vitra.com'node_modules'nunjucks'src'environment.js:242:17)
有人知道为什么我需要在Nunjucks工作之前对表单数据进行字符串化和解析吗?似乎没有任何意义吗?
编辑
为了更好地解释,下面是整个函数:
<<p> 函数/em>function sender(data, callback) {
const config = require('./config'),
renderer = nunjucks.configure(path.join(__dirname, 'views', 'mail-templates')),
transporter = nodemailer.createTransport((smtpTransport(config.smtp)));
transporter.sendMail({
from: `${data.name} <${data.email}>`,
replyTo: data.email,
to: config.email.receiver,
subject: config.email.subject,
html: renderer.render(`${data.origin}.html`, JSON.parse(JSON.stringify(data))),
}, callback);
}
函数调用sender(req.body, (message, err) => {
res.json({ message: message, errors: err });
});
点播。Body又名data
{ contacttype: 'E-Mail',
software: '',
text: 'Test',
email: '',
name: '',
origin: 'contact' }
尝试将代码更改为
function sender(data, callback) {
const config = require('./config'),
renderer = nunjucks.configure(path.join(__dirname, 'views', 'mail-templates')),
transporter = nodemailer.createTransport((smtpTransport(config.smtp)));
renderer.render(`${data.origin}.html`, data, function(err, html){
if (err)
return callback(err);
transporter.sendMail({
from: `${data.name} <${data.email}>`,
replyTo: data.email,
to: config.email.receiver,
subject: config.email.subject,
html: html
}, callback
);
});
}
创建复制/混合对象使用Object.assign
let copy = Object.assign({}, src1, src2);
相关文章:
- 为什么JSON.stringify没有序列化原型值
- 尝试JSON.stringify Ember模型时Id丢失
- MVC C#从jQuery和JSON.stringify创建的cookie中读取值
- JSON.stringify和Object.keys在同一个对象上产生不同的结果
- JSON.stringify没有'在更改的对象上无法按预期工作.如何处理
- JSON.stringify正在忽略我的嵌套对象
- 如何避免JSON.stringify在特殊情况下返回undefined,从而为JSON.parse创建字符串失败
- 正在从JSON.stringify中提取数据
- JSON.stringify抛出RangeError:大型对象的字符串长度无效
- 你如何JSON.stringify一个ES6地图
- 在这种使用 JSON.stringify() 时有什么区别
- JavaScript 中的 JSON.stringify () 错误
- 在什么情况下,应该.deep.equal失败,但使用JSON.stringify进行比较工作正常
- 如何使用替换器 param json.stringify 访问嵌套对象
- 使用 jQuery.map 后使用 JSON.stringify 的问题
- JSON.stringify未序列化可枚举属性
- JSON.stringify没有序列化对象
- nodejs:请求jsmultipart二级文件和JSON.stringify
- JSON.Stringify replacer函数无法获取键值
- Javascript:JSON.stringify未按预期工作