首页 > 解决方案 > TypeError:req.post 不是函数

问题描述

在注册用户后,在我的server.js注册路径下,我想发送验证电子邮件和验证短信。但是smsService 请求会引发错误。我不确定出了什么问题。

你能帮我找出错误吗?

server.js:

app.post('/signup-user', upload.single('avatar'), (req, res) => {
    let sAvatarImagePath = req.file.path.split("public/").pop()
    let token = jwt.sign({
        username: req.body.email,
    }, 'supersecret', {
        expiresIn: 240
    });
    user.createUser(req.body, sAvatarImagePath, (err, jResult) => {
        if (err) {
            return res.send(jResult)
        }
        mailer.sendEmail(res, req.body, token)
        smsService.sendSms(req, res, (err, jResult) => {
            if (err) {
                return res.send(jResult)
            }
        })
        return
    })
})

短信服务.js:

 var smsService = {}

    smsService.sendSms = (req, res, fCallback) => {

        const sUrl = 'http://smses.io/api-send-sms.php';
        const sToken = '$2y$10$//Qx9DsrDCIeNeWIjr1V.uWRR3m9raVGJNN4iDRZsxNDxknvCJsPC';
        let sRecipientNbr = req.body.mobile_number;
        let sMessage = '5678'

        console.log('CALLING SMS API...', sRecipientNbr);
        req.post(
            sUrl, {
                form: {
                    action: 'SEND',
                    mobile: sRecipientNbr,
                    message: sMessage,
                    apiToken: sToken,
                },
            },
            (err, res, body) => {
                if (err) {
                    console.log('ERROR WHEN CALLING SMS API', err);
                    return fCallback({
                        error: true,
                        message: 'System is currently unavailable'
                    });
                }
                var jResponse = safeJsonParse(body);
                console.log('SMS API return:', jResponse);
                if (jResponse.status != 'ok') {
                    console.error('SMS API RETURNED ERROR', err, jResponse);
                    return fCallback({
                        error: true,
                        message: 'System is currently unavailable'
                    });
                }
                return fCallback(false);
            },
        );
    }
    module.exports = smsService

标签: node.jspostrequest

解决方案


我认为您对express Request objectNodeJS request module感到困惑。您需要安装NodeJS 请求模块来发出外部 http 请求

npm install request --save

然后在服务中使用smsService.js

var request = require('request');
var smsService = {}

smsService.sendSms = (req, res, fCallback) => {

    const sUrl = 'http://smses.io/api-send-sms.php';
    const sToken = '$2y$10$//Qx9DsrDCIeNeWIjr1V.uWRR3m9raVGJNN4iDRZsxNDxknvCJsPC';
    let sRecipientNbr = req.body.mobile_number;
    let sMessage = '5678'

    console.log('CALLING SMS API...', sRecipientNbr);
    request.post(
        sUrl, {
            form: {
                action: 'SEND',
                mobile: sRecipientNbr,
                message: sMessage,
                apiToken: sToken,
            },
        },
        (err, res, body) => {
            if (err) {
                console.log('ERROR WHEN CALLING SMS API', err);
                return fCallback({
                    error: true,
                    message: 'System is currently unavailable'
                });
            }
            var jResponse = safeJsonParse(body);
            console.log('SMS API return:', jResponse);
            if (jResponse.status != 'ok') {
                console.error('SMS API RETURNED ERROR', err, jResponse);
                return fCallback({
                    error: true,
                    message: 'System is currently unavailable'
                });
            }
            return fCallback(false);
        },
    );
}
module.exports = smsService

我希望这能帮到您


推荐阅读