nextjs运行请求接口经常出现警告API resolved without sending a response
// const mysql = require('mysql');
const mysql = require('mysql2/promise')
const HOST = '127.0.0.1',
PORT = '3306',
DATABASE = 'user',
USERNAME = 'root',
PASSWORD = 'welcome123'
// 创建数据库连接
const connection = mysql.createConnection({
host: HOST,
user: USERNAME,
port: PORT,
password: PASSWORD,
database: DATABASE
});
// 定义用户数据表模型
const Main = {
id: {
type: 'INT',
allowNull: false,
primaryKey: true,
autoIncrement: true
},
ProjectName: {
type: 'VARCHAR(100)',
allowNull: false
},
clientName: {
type: 'VARCHAR(100)',
allowNull: false
},
price: {
type: 'VARCHAR(100)',
allowNull: false
},
publish_time: {
type: 'VARCHAR(100)',
allowNull: false
},
projectContent:{
type: 'VARCHAR(100)',
allowNull: false
},
projectAttion:{
type: 'VARCHAR(100)',
allowNull: false
},
worktime:{
type: 'INT',
allowNull: false
},
address:{
type: 'VARCHAR(100)',
allowNull: false
},
clientId:{
type: 'INT',
allowNull: false
},
mandataryId:{
type: 'INT',
allowNull: false
},
progress:{
type: 'INT',
allowNull: false
},
contact:{
type: 'VARCHAR(100)',
allowNull: false
},
mandataryName:{
type: 'VARCHAR(100)',
allowNull: false
},
};
export const searchList = async(params: object) => {
const conn = await connection;
const { page, pageSize } = params;
const offset = (page - 1) * pageSize;
const countQuery = `SELECT COUNT(*) as total FROM mlist`;
const [countResult] = await conn.execute(countQuery);
const totalItems = countResult[0].total;
const sql = `SELECT * FROM mlist LIMIT ${pageSize} OFFSET ${offset}`;
const [results] = await conn.execute(sql);
const totalPages = Math.ceil(totalItems / pageSize);
return {
data: results,
page: page,
totalPages: totalPages
};
}
const { searchList } = require('../models');
export const resolvers = async (req,res) => {
return new Promise((resolve, reject) => {
searchList(req.query).then(response => {
// 处理成功
res.statusCode = 200
res.setHeader('Content-Type', 'application/json');
res.setHeader('Cache-Control', 'max-age=180000');
res.json({
code:0,
data:response,
msg:'success'
})
resolve(response);
})
.catch(error => {
// 处理错误
res.statusCode = 500
res.setHeader('Content-Type', 'application/json');
res.setHeader('Cache-Control', 'max-age=180000');
res.json({
code:500,
data:error,
msg:'error'
})
reject(error);
});
})
}
```javascript
import type { NextApiRequest,NextApiResponse } from "next";
import { resolvers } from "./resolvers";
export default function detail(
req:NextApiRequest,
res:NextApiResponse
){
switch (req.query.id) {
case 'list':
resolvers(req,res).then(result => {
// 处理查询结果
return result;
})
.catch(error => {
// 处理错误
return error
});
break;
default:
break;
}
}

百度说是使用promise或者try的方式都是同样的警告,页面没有任何报错
【以下回答由 GPT 生成】
问题分析:
问题出现在Next.js运行请求接口时,经常出现警告"API resolved without sending a response",这个警告是表示接口没有返回响应结果。原因可能是接口代码有问题或者数据库查询出现错误。
解决方案:
1. 确保数据库连接正常:
首先,确认数据库连接信息是否正确。检查HOST、PORT、USERNAME、PASSWORD和DATABASE等参数是否正确配置。
2. 确保数据库查询语句正确:
查询语句可能存在错误,导致没有正确查询到数据或查询语句没有执行成功。可以使用console.log打印查询语句,查看是否正确。可以使用try-catch捕获错误,并打印错误信息。
3. 确保接口返回响应结果:
在接口代码中,需要通过res.send()或res.json()等方法返回响应结果。确认接口代码中是否正确返回了响应结果。
以下是给出的解决方案的代码示例:
```js
// 对接口进行修改
export const searchList = async (params: object, res: object) => {
try {
const conn = await connection;
const { page, pageSize } = params;
const result = await conn.query(`SELECT * FROM user LIMIT ${(page-1)*pageSize}, ${pageSize}`);
res.json(result);
} catch (error) {
console.log(error);
res.send(error);
}
};
需要注意的是,以上只是一个解决方案的示例,具体的问题还需要根据实际情况进行分析和调试。如果有更详细的错误信息,可以提供给我,我可以给出更具体的解决方案。 ```