Javascript 使用vanilla JS ajax发送数据并使用节点api读取数据
我的客户端有以下代码:Javascript 使用vanilla JS ajax发送数据并使用节点api读取数据,javascript,node.js,ajax,express,Javascript,Node.js,Ajax,Express,我的客户端有以下代码: sendMail(e) { e.preventDefault(); var name = document.getElementById('name').value; var contactReason = document.getElementById('contactReason').value; var email = document.getElementById('email').value; var additional
sendMail(e) {
e.preventDefault();
var name = document.getElementById('name').value;
var contactReason = document.getElementById('contactReason').value;
var email = document.getElementById('email').value;
var additionalInfo = document.getElementById('additionalInfo').value;
var body = {
name: name,
contactReason: contactReason,
email: email,
additionalInfo: additionalInfo,
};
console.log(body);
fetch('http://localhost:4000/', {
method: 'POST',
body: body.toString(),
}).then(r => console.log(r)).catch(e => console.log(e));
}
这类作品。它将对象记录到控制台,并将某些内容发送到后端
这是我的节点调用:
var express = require('express');
var router = express.Router();
var cors = require('cors');
var app = express();
var bodyParser = require('body-parser');
app.use(bodyParser.json()); // for parsing application/json
app.use(bodyParser.urlencoded({extended: true}));
app.use(cors());
app.options('*', cors());
var a = '=';
router.post('/', (req, res, next) => {
console.log('mailing');
console.log(a);
console.log(req.body);
a += '=';
var nodemailer = require('nodemailer');
var transporter = nodemailer.createTransport({
host: "smtp.gmail.com", // hostname
auth: {
user: '******',
pass: '******'
}
});
let mailOptions = {
from: `${req.body.name} ${req.body.email}`, // sender address
to: 'alexander.ironside@mygeorgian.ca', // list of receivers
subject: 'Email from UczSieApp contact form', // Subject line
text: 'Hello world ', // plaintext body
html: `
<h4>Imie: ${req.body.name}</h4>
<h4>Email: ${req.body.email}</h4>
<h4>Powod kontaktu: ${req.body.contactReason}</h4>
<p>Wiadomosc: ${req.body.additionalInfo}</p>
`
};
// send mail with defined transport object
transporter.sendMail(mailOptions, function (error, info) {
if (error) {
return console.log(error);
}
console.log('Message sent: ' + info.response);
});
}
);
module.exports = router;
var express=require('express');
var router=express.router();
var cors=要求(“cors”);
var-app=express();
var bodyParser=require('body-parser');
app.use(bodyParser.json());//用于解析application/json
use(bodyParser.urlencoded({extended:true}));
应用程序使用(cors());
app.options('*',cors());
变量a='=';
router.post(“/”,(请求、恢复、下一步)=>{
console.log(“邮寄”);
控制台日志(a);
控制台日志(请求主体);
a+='=';
var nodeEmailer=require('nodeEmailer');
var transporter=nodeEmailer.createTransport({
主机:“smtp.gmail.com”//hostname
认证:{
用户:'******',
通过:“******”
}
});
让邮件选项={
发件人:`${req.body.name}${req.body.email}`,//发件人地址
致:亚历山大。ironside@mygeorgian.ca“,//接收者列表
主题:“UczSieApp联系人表单中的电子邮件”,//主题行
text:'你好,世界',//纯文本正文
html:`
Imie:${req.body.name}
电子邮件:${req.body.Email}
Powod kontaktu:${req.body.contactReason}
Wiadomosc:${req.body.additionalInfo}
`
};
//使用定义的传输对象发送邮件
transporter.sendMail(邮件选项,函数(错误,信息){
如果(错误){
返回console.log(错误);
}
console.log('发送的消息:'+信息响应);
});
}
);
module.exports=路由器;
那么代码现在的作用是:
正在创建对象,正在将某些内容(不确定确切内容)发送到节点后端,并且正在发送电子邮件。但是req.body
被记录为{}
我想做的是:
读取作为body
发送到后端的值,并发送包含此数据的电子邮件
我缺少什么?应该添加到fetch中
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
body: JSON.stringify(body),
所有正确的代码
前端
sendMail(e) {
e.preventDefault();
var name = document.getElementById('name').value;
var contactReason = document.getElementById('contactReason').value;
var email = document.getElementById('email').value;
var additionalInfo = document.getElementById('additionalInfo').value;
var body = {
name: name,
contactReason: contactReason,
email: email,
additionalInfo: additionalInfo,
};
console.log(body);
fetch('http://localhost:4000/', {
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
body: JSON.stringify(body),
method: 'POST',
}).then(r => console.log(r)).catch(e => console.log(e));
}
后端
var express = require('express');
var router = express.Router();
var cors = require('cors');
var app = express();
var bodyParser = require('body-parser');
app.use(bodyParser.json()); // for parsing application/json
app.use(bodyParser.urlencoded({extended: true}));
app.use(cors());
app.options('*', cors());
var a = '=';
router.post('/', (req, res, next) => {
console.log('mailing');
console.log(a);
console.log(req.body);
a += '=';
var nodemailer = require('nodemailer');
var transporter = nodemailer.createTransport({
host: "smtp.gmail.com", // hostname
auth: {
user: '******',
pass: '******'
}
});
let mailOptions = {
from: `${req.body.name} ${req.body.email}`, // sender address
to: 'alexander.ironside@mygeorgian.ca', // list of receivers
subject: 'Email from UczSieApp contact form', // Subject line
text: 'Hello world ', // plaintext body
html: `
<h4>Imie: ${req.body.name}</h4>
<h4>Email: ${req.body.email}</h4>
<h4>Powod kontaktu: ${req.body.contactReason}</h4>
<p>Wiadomosc: ${req.body.additionalInfo}</p>
`
};
// send mail with defined transport object
transporter.sendMail(mailOptions, function (error, info) {
if (error) {
return console.log(error);
}
console.log('Message sent: ' + info.response);
});
}
);
module.exports = router;
var express=require('express');
var router=express.router();
var cors=要求(“cors”);
var-app=express();
var bodyParser=require('body-parser');
app.use(bodyParser.json());//用于解析application/json
use(bodyParser.urlencoded({extended:true}));
应用程序使用(cors());
app.options('*',cors());
变量a='=';
router.post(“/”,(请求、恢复、下一步)=>{
console.log(“邮寄”);
控制台日志(a);
控制台日志(请求主体);
a+='=';
var nodeEmailer=require('nodeEmailer');
var transporter=nodeEmailer.createTransport({
主机:“smtp.gmail.com”//hostname
认证:{
用户:'******',
通过:“******”
}
});
让邮件选项={
发件人:`${req.body.name}${req.body.email}`,//发件人地址
致:亚历山大。ironside@mygeorgian.ca“,//接收者列表
主题:“UczSieApp联系人表单中的电子邮件”,//主题行
text:'你好,世界',//纯文本正文
html:`
Imie:${req.body.name}
电子邮件:${req.body.Email}
Powod kontaktu:${req.body.contactReason}
Wiadomosc:${req.body.additionalInfo}
`
};
//使用定义的传输对象发送邮件
transporter.sendMail(邮件选项,函数(错误,信息){
如果(错误){
返回console.log(错误);
}
console.log('发送的消息:'+信息响应);
});
}
);
module.exports=路由器;
我用GET代替POST,这解决了我的问题。这是一种欺骗,但它是有效的。在您的客户机中,您希望执行JSON.stringify(body)
,因为.toString()
将导致'[object]'
。这可能是正确的,但有助于澄清错误和更改的内容。