Javascript Koa2发送404,尽管该函数可以工作。什么&x2019;怎么回事?

Javascript Koa2发送404,尽管该函数可以工作。什么&x2019;怎么回事?,javascript,koa2,Javascript,Koa2,我已经用Koa2设置了一个API,它在发送到/联系姓名、电子邮件和消息时向mailgun发送请求。 电子邮件发送得很好,但我在控制台客户端收到了404。为什么我会有这种行为 module.exports = { /** *@api {post} /contact *@apiGroup Public * @apiName sendMail * @apiParam {String} [name] User needs to provide their name * @apiParam {

我已经用Koa2设置了一个API,它在发送到/联系姓名、电子邮件和消息时向mailgun发送请求。 电子邮件发送得很好,但我在控制台客户端收到了404。为什么我会有这种行为

module.exports = {

/**
 *@api {post} /contact
 *@apiGroup Public
 * @apiName sendMail
 * @apiParam {String} [name] User needs to provide their name
 * @apiParam {String} [email] User needs to provide their email
 * @apiParam {String} [message] user needs to provide their message
 * @apiParamExample {String} Request Params :
 * {
 *  "name"  : "Cello",
 *  "email" : "yo@yo.ma,
 *  "message" : "you are so great"
 * }
 * @apiSuccess {Object} return value  A success or failure
 * @apiSuccessExample {json} Response:
 * {
 *  "result" : "success"
 *  "callback" : "Do something"
 * }
 * @apiExample {curl} Example usage:
 * curl -i http://localhost:4000/contact
 * @apiDescription Any user can submit contact
 * @apiHeader {String} Authorization  JWT Authorization header (optional)
 * @apiHeaderExample {json} Request Authorization Header
 * {
 *  "authorization" : "jkahdkjashdk324324342"
 * }
 */
async mail(ctx){
let {email, name, message} = ctx.request.body;

if (!email) {
    ctx.throw(400, 'please provide the email')
}
if (!name) {
    ctx.throw(400, 'please provide a name')
}
if (!message) {
    ctx.throw(400, 'please provide a message')
}
var api_key = 'key-xxxxxxxxxx';
var domain = 'mg.domain.com';
var mailgun = require('mailgun-js')({apiKey: api_key, domain: domain});

var data = {
    from: name+'<'+email+'>',
    to: 'me@domain.com',
    subject: 'Contact Form',
    text: message
};

var result = mailgun.messages().send(data, function (error, body) {
    console.log(body);
});
module.exports={
/**
*@api{post}/联系人
*@每组公众
*@apiName sendMail
*@apiParam{String}[name]用户需要提供其名称
*@apiParam{String}[email]用户需要提供他们的电子邮件
*@apiParam{String}[message]用户需要提供他们的消息
*@apiParamExample{String}请求参数:
* {
*“名字”:“大提琴”,
*“电子邮件”:yo@yo.ma,
*“信息”:“你太棒了”
* }
*@apisccess{Object}返回成功或失败的值
*@apisccessexample{json}响应:
* {
*“结果”:“成功”
*“回调”:“做点什么”
* }
*@apiExample{curl}示例用法:
*curl-ihttp://localhost:4000/contact
*@apiscription任何用户都可以提交联系人
*@apiHeader{String}授权JWT授权头(可选)
*@apiHeaderExample{json}请求授权头
* {
*“授权”:“JKAHDKJASHDK324342”
* }
*/
异步邮件(ctx){
让{email,name,message}=ctx.request.body;
如果(!电子邮件){
ctx.throw(400,“请提供电子邮件”)
}
如果(!name){
ctx.throw(400,“请提供名称”)
}
如果(!消息){
ctx.throw(400,“请提供消息”)
}
var api_key='key-xxxxxxxxx';
var domain='mg.domain.com';
var mailgun=require('mailgun-js')({apiKey:api_-key,domain:domain});
风险值数据={
发件人:name+“”,
致:'me@domain.com',
主题:'联系方式',
文本:消息
};
var result=mailgun.messages().send(数据、函数(错误、正文){
控制台日志(主体);
});
}
}

当您使用
async
-
wait
模式时,您的代码应该如下所示:

async mail(ctx){

    ...

    var result = await mailgun.messages().send(data)
    console.log(body);
};

缺少的部分是
wait
。由于文档的原因,
mailgun js
模块也实现了承诺,这应该可以工作(未经测试)。

我认为这可能是因为邮件函数是异步的,但mailgun调用并不等待来自mailgun的响应。