Nodejs 关于Heroku线上模块问题,【错误被我找到】->我的参数拼写错误,擦=.=

Nodejs 关于Heroku线上模块问题,【错误被我找到】->我的参数拼写错误,擦=.=

####具体情况

最近看了本论坛关于微信API的帖子,自己利用它加上自己的爬虫做了一个微信订阅号的小机器人,就是根据用户的输入,它自动request其它服务器得到数据并返回给微信用户。前天都完成了,本地测试通过。可是部署到heroku上时,假如我在我的微信端输入:谷歌。它就会request其它服务器,但是这一跑程序就会挂。web页面会出现application error。
####相关代码

var resMsg = {},
	contents = msg.content.toString();
	if(contents === "help"){
		resMsg = {
			fromUserName:msg.toUserName,
			toUserName:msg.fromUserName,
			msgType:"text",
			content:"您可以键入:历史上今天、热搜或者您想搜的关键中文词条。have a try :)",
			funcFlag:0
		}
		weixin.sendMsg(resMsg);
	}else if(contents === "历史上今天"){
		pachong.getMainPage(function(err,hist_con,hot_son){
			if(err){
				resMsg = {
					fromUserName:msg.toUserName,
					toUserName:msg.fromUserName,
					msgType:"text",
					content:err.message,
					funcFlag:0
				};
			}else{
				resMsg = {
					fromUserName:msg.toUserName,
					toUserName:msg.fromUserName,
					msgType:"text",
					content:hist_con,
					funcFlag:0
				};
			}
			weixin.sendMsg(resMsg);
		});

后面还有些代码这就不贴了,基本和上面差不多。

####代码说明

本项目用的是本论坛里一位朋友的微信APIweixin-apipachong这是我自己写的一个文件,我测试过,没有错误!

####希望得到的解答

昨天email了论坛里面一位大牛,他给的解释就是:是不是模块线上有没有npm install。本人对heroku不是很熟悉,对这样的解释也是一头雾水。本项目就是用到了request && cheerio&&weixin-api这三个模块。我也琢磨了大半天了,想不出处理的办法,于是来这里,希望得到相关的解释和给同样遇到这样类似问题的朋友以经验。希望得到你们的帮助,Any help is much appreciated:)


6 回复

Node.js 关于Heroku线上模块问题,【错误被我找到】->我的参数拼写错误,擦=.=

具体情况

最近使用微信API开发了一个小机器人,用于根据用户的输入请求其他服务器的数据,并返回给微信用户。本地测试通过后,将应用部署到Heroku上时遇到了问题。如果在微信端输入特定内容(如“谷歌”),程序会请求其他服务器,但在Heroku上运行时会失败,显示application error

相关代码

var resMsg = {},
    contents = msg.content.toString();

if (contents === "help") {
    resMsg = {
        fromUserName: msg.toUserName,
        toUserName: msg.fromUserName,
        msgType: "text",
        content: "您可以键入:历史上今天、热搜或者您想搜的关键中文词条。have a try :)",
        funcFlag: 0
    };
    weixin.sendMsg(resMsg);
} else if (contents === "历史上今天") {
    pachong.getMainPage(function (err, hist_con, hot_son) {
        if (err) {
            resMsg = {
                fromUserName: msg.toUserName,
                toUserName: msg.fromUserName,
                msgType: "text",
                content: err.message,
                funcFlag: 0
            };
        } else {
            resMsg = {
                fromUserName: msg.toUserName,
                toUserName: msg.fromUserName,
                msgType: "text",
                content: hist_con,
                funcFlag: 0
            };
        }
        weixin.sendMsg(resMsg);
    });
}

代码说明

  • 使用了本论坛里一位朋友的微信API weixin-api
  • pachong 是我自己编写的一个文件,经过测试没有错误。
  • 项目中用到了 requestcheerio 这两个模块。

错误分析与解决

昨天联系了一位大牛,他的建议是检查是否所有依赖项都已正确安装。经过排查发现,问题出在我的代码中一个参数拼写错误。例如,在某个函数调用中,我可能将参数名拼写错误,导致程序无法正常执行。

修正后的代码示例:

// 假设原本的错误是在这里
pachong.getMainPage(function (err, historyContent, hotSon) { // 修改参数名
    if (err) {
        resMsg = {
            fromUserName: msg.toUserName,
            toUserName: msg.fromUserName,
            msgType: "text",
            content: err.message,
            funcFlag: 0
        };
    } else {
        resMsg = {
            fromUserName: msg.toUserName,
            toUserName: msg.fromUserName,
            msgType: "text",
            content: historyContent, // 修改参数名
            funcFlag: 0
        };
    }
    weixin.sendMsg(resMsg);
});

最终结论

通过仔细检查代码中的拼写错误,我找到了问题所在。确保所有依赖项都已通过 npm install 安装,并且在Heroku上运行时不会出现因依赖缺失导致的错误。希望我的经验能帮助到遇到类似问题的朋友。


当我键入help时,有返回,并且没有错误。

看下heroku的log,会有错误提示啊,我把weixin-robot扔上去没问题

恩, 是我的错,刚刚已经找到错误了,是拼写错误,我勒个擦,,js就这个不好,debug成本高,现在进行最后的调试阶段了,待会就release了。;)

###错误地方

在的历史上今天的返回参数错了,应当是 hot_so

从你的描述来看,你在本地环境中测试时一切正常,但在Heroku线上环境运行时出现了问题。你提到已经找到了错误,是因为参数拼写错误。这里我假设错误可能是在调用pachong.getMainPage()方法时传递的参数不正确或缺少某些参数。

为了确保你能顺利解决问题,以下是一些可能有用的建议和一个简单的示例代码片段,展示如何在Heroku中正确使用依赖模块:

示例代码

const express = require('express');
const request = require('request');
const cheerio = require('cheerio');

const app = express();

app.post('/wx', (req, res) => {
    const { content } = req.body;
    let resMsg = {};

    if (content === 'help') {
        resMsg = {
            fromUserName: 'toUserName',
            toUserName: 'fromUserName',
            msgType: 'text',
            content: '您可以键入:历史上今天、热搜或者您想搜的关键中文词条。have a try :)',
            funcFlag: 0
        };
        // 发送消息
        weixin.sendMsg(resMsg);
    } else if (content === '历史上今天') {
        pachong.getMainPage((err, hist_con) => {
            if (err) {
                resMsg = {
                    fromUserName: 'toUserName',
                    toUserName: 'fromUserName',
                    msgType: 'text',
                    content: err.message,
                    funcFlag: 0
                };
            } else {
                resMsg = {
                    fromUserName: 'toUserName',
                    toUserName: 'fromUserName',
                    msgType: 'text',
                    content: hist_con,
                    funcFlag: 0
                };
            }
            // 发送消息
            weixin.sendMsg(resMsg);
        });
    }

    res.json({ status: 'success' });
});

const PORT = process.env.PORT || 3000;
app.listen(PORT, () => console.log(`Server running on port ${PORT}`));

注意事项

  1. 检查参数: 确保pachong.getMainPage()函数调用时传递的参数与预期一致。
  2. 依赖安装: 在Heroku部署时,确保所有需要的依赖项都已经通过package.json文件正确安装。你可以添加package.json文件来明确指定这些依赖项。
  3. 日志检查: Heroku提供了详细的日志查看功能,可以通过heroku logs --tail命令实时查看应用的日志信息,帮助定位错误。

希望这些建议对你有所帮助!如果还有其他问题,请随时告知。

回到顶部