我正在尝试使用 TYPEORM 创建一个 put 方法,但不明白如何修复此错误以及原因。这个请求一个typeof?但我的用户有价值。 (我是新手,当然)。
谁能帮帮我?我该如何解决?
什么时候:
const user: any = await usersRepository.findOne(req.params.id)
所以: 没问题 (为什么)
错误:
{
"resource": "/Users/camargo/Documents/Estudo/nodejs-1/source/server.ts",
"owner": "typescript",
"code": "2345",
"severity": 8,
"message": "Argument of type 'users | undefined' is not assignable to parameter of type 'users'.\n Type 'undefined' is not assignable to type 'users'.",
"source": "ts",
"startLineNumber": 71,
"startColumn": 31,
"endLineNumber": 71,
"endColumn": 35
}
代码
** source/server.ts */
import http from 'http';
import { connection } from "./connection/connection"
import express, { Express } from 'express';
import morgan from 'morgan';
import routes from './routes/posts';
import cors from "cors";
import { users } from './entities/users';
// Setando rotas express
const router: Express = express();
const app=express()
app.use(cors())
app.use(express.json())
const server=app.listen(3000,()=>{
console.log("Server rodando... 3000....")
})
app.get("/api",(req,res)=>{
res.send("API - Bem Vindo")
})
connection.then(
async connection=>{
console.log("Conectado")
const usersRepository = connection.getRepository(users);
app.get("/api/users/:id",async(req,res)=>{
/* Metodos */
//METODO GET
const user = await usersRepository.findOne({where: { id: req.params.id }})
res.json({
message:"success",
payload: user
})
})
// METODO POST
app.post("/api/users",async (req,res)=>{
console.log("body",req.body)
const user = await usersRepository.create(req.body)
const results = await usersRepository.save(user);
res.json({
message: "success",
payload: results
});
})
// METODO DELETE
app.delete("/api/users/:id",async(req,res)=>{
const user = await usersRepository.delete(req.params.id)
res.json({
message:"success",
})
})
//METODO PUT
app.put("/api/users/:id",async(req,res)=>{
const user = await usersRepository.findOne(req.params.id)
usersRepository.merge(user, req.body);
const result = await usersRepository.save(user);
res.json({
message:"success",
payload:result
})
})
}
).catch(error=>{
console.log(error)
})
/** Conexao teste morgan */
router.use(morgan('dev'));
/** Parse the req */
router.use(express.urlencoded({ extended: false }));
/** Takes care of JSON data */
router.use(express.json());
/** Regras da API*/
router.use((req, res, next) => {
// CORS
res.header('Access-Control-Allow-Origin', '*');
// CORS headers
res.header('Access-Control-Allow-Headers', 'origin, X-Requested-With,Content-Type,Accept, Authorization');
// CORS metodos
if (req.method === 'OPTIONS') {
res.header('Access-Control-Allow-Methods', 'GET PATCH DELETE POST');
return res.status(200).json({});
}
next();
});
/** Routes */
router.use('/', routes);
/** Error handling */
router.use((req, res, next) => {
const error = new Error('not found');
return res.status(404).json({
message: error.message
});
});
/** Server */
const httpServer = http.createServer(router);
const PORT: any = process.env.PORT ?? 6060;
httpServer.listen(PORT, () => console.log(`Server rodando em ${PORT}`));
答案 0 :(得分:0)
const user = await usersRepository.findOne(req.params.id) 返回 user 或 undefined 因为不能保证给定 ID 的用户存在。
usersRepository.merge 需要 users
类型,而您提供的是 users|undefined
类型,如果您在 tsconfig.json 中启用了 strictNullChecking
,则它们彼此不兼容< /p>
要解决此问题,您必须先对其进行空检查:
const user = await usersRepository.findOne(req.params.id)
if(user) {
usersRepository.merge(user, req.body);
const result = await usersRepository.save(user);
res.json({
message:"success",
payload:result
})
}
res.status(404).json({message: "user not found"})