首页 > 解决方案 > 为什么会收到:处理请求时出错。在使用适配器之前不要注册任何解析器

问题描述

我正在使用 nodejs + express + express 适配器创建一项技能。我想添加一个中间件来拦截请求并检查请求正文以进行一些验证,但我收到此错误: Error in processing request. Do not register any parsers before using the adapter

这是我的 index.ts 代码:

const app: express.Application = express()

// Skill entry point
const skill = application.getSkillBuilder.createSkillForWebService()

const adapter = new ExpressAdapter(skill, config.verifySignature, config.verifyTimestamp)
app.use(bodyParser.json())

// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-ignore
app.use((req: any, res: any, next: () => void) => {
    console.log(req)
})
app.post("/", adapter.getRequestHandlers())

const listener = app.listen(PORT, function () {
    const { address, port } = listener.address() as AddressInfo
    logger.debug("%s listening to %s%s", app.name, address, port)
})

所以我打印了正文,但我得到了错误:处理请求时出错。在使用适配器之前不要注册任何解析器

但是,如果我删除该行:app.use(bodyParser.json()) 该技能有效,但body.req打印 undefined in:

app.use((req: any, res: any, next: () => void) => {
    console.log(req)
})

关于如何处理这个问题的任何提示?

标签: node.jsexpressalexa-skills-kitalexa-skill

解决方案


app.use(express.json());

app.use(express.urlencoded({ extended: false }));

将此中间件放在app.js您的路线上方,希望它对您有用......


推荐阅读