我正在尝试使用Next.Js作为练习,同时使用typedefinitions和“upstash,无服务器访问Redis数据库”来创建一个messenger的克隆。我使用Node.js(已经在upstash的控制台上给出了),通过Next.Js和Upstash控制台提供的文档完成了整个过程。我的消息类型定义如下:(打字.d.ts)
export type Message = {
id: string,
message: string,
created_at: number,
username: string,
profilePic: string,
email: string,
};
现在,为了“addMessages”我已经使用了API处理过程(异步承诺),并创建了以下内容:
// Next.js API route support: https://nextjs.org/docs/api-routes/introduction
import type { NextApiRequest, NextApiResponse } from 'next'
import redis from '../../redis';
import { Message } from '../../typings';
type Data = {
message: Message;
}
type ErrorData = {
body: string
}
export default async function handler(
req: NextApiRequest,
res: NextApiResponse<Data | ErrorData>
) {
if(req.method != 'POST') {
res.status(405).json({ body: "Method Not Allowed"
});
return;
}
const { message } = req.body;
const newMessage = {
...message,
//Replace the timestamp of the user to the timestamp of the server
created_at: Date.now(),
};
// Push to upstash redis db
await redis.hset("messages", message.id, JSON.stringify(newMessage));
res.status(200).json({ message: "newMessage" })
}
类型数据={消息:消息;}”和代码的最后一行“res.status(200).json({消息:“新消息”})
只要我点击保存它给出以下错误:类型“string”不能赋值给类型“Message”。我已经尝试了硬重新加载,但错误仍然存在。在我点击前端上的随机消息时,控制台给出了以下错误:'“侦听器通过返回true指示异步响应,但消息通道在收到响应之前关闭”'我已经检查了upstash的控制台,请帮助我。谢谢。
1条答案
按热度按时间hpxqektj1#
这是因为你的
Data
接口需要一个以message
为键,以Message
接口为值的对象,而你却试图发送一个字符串newMessage
。所以你可以做三件事:
1.我看到你有一个
newMessage
对象,所以不要发送字符串"newMessage"
,而是发送newMessage
对象,如下所示:1.设置
Data
的类型为这样,您可以将消息作为
1.在嵌套键值对中发送消息
我会推荐第一个或第二个。
另外,如果您选择只发送一个字符串,typescript可能会抱怨
Message
接口中的其他字段丢失,我建议您将它们设置为可选字段。