nodejs API不显示特定产品id的产品



我正在尝试创建一个基本的nodejs API(无框架)

My Folder Structure is

controllers
productController.js
models
productModels.js 
data
products.js
node_modules
package.json
package-lock.json
server.js

我正试图将产品数据发送到与特定产品id相关联的客户端。但我在这里面临的问题是在productModel.js文件中。在该文件中,我无法过滤出具有id的特定产品。一旦我将array.prototype.find()方法中的id作为条件使用,它似乎无法识别id的值。我想知道为什么?

products.js文件

export const products =  [
{
"userId": 1,
"id": 1,
"title": "sunt aut facere repellat provident occaecati excepturi optio reprehenderit",
"body": "quia et suscipitnsuscipit recusandae consequuntur expedita et cumnreprehenderit molestiae ut ut quas totamnnostrum rerum est autem sunt rem eveniet architecto"
},
{
"userId": 1,
"id": 2,
"title": "qui est esse",
"body": "est rerum tempore vitaensequi sint nihil reprehenderit dolor beatae ea dolores nequenfugiat blanditiis voluptate porro vel nihil molestiae ut reiciendisnqui aperiam non debitis possimus qui neque nisi nulla"
},
{
"userId": 1,
"id": 3,
"title": "ea molestias quasi exercitationem repellat qui ipsa sit aut",
"body": "et iusto sed quo iurenvoluptatem occaecati omnis eligendi aut adnvoluptatem doloribus vel accusantium quis pariaturnmolestiae porro eius odio et labore et velit aut"
},
{
"userId": 1,
"id": 4,
"title": "eum et est occaecati",
"body": "ullam et saepe reiciendis voluptatem adipiscinsit amet autem assumenda provident rerum culpanquis hic commodi nesciunt rem tenetur doloremque ipsam iurenquis sunt voluptatem rerum illo velit"
}]

productController.js文件

import {findAll, findById} from '../models/productModel.js'
export const getProduct = async (req, res, id) => {
try{
const product = await findById(id)
if(!product){
res.end(JSON.stringify({message: 'Prdouct not found'}))
}else{
res.writeHead(200, { 'Content-Type': 'application/json' });
res.end(JSON.stringify(product));
}
}catch(err){
console.log(err)
}
}

productModel.js文件

import {products} from '../data/products.js'
export const findById = (id) => {
const promise = new Promise((resolve, reject) => {       
setTimeout(() => {
console.log(id)
const product = products.find(p => p.id === id)
resolve(product)
// reject('SERVER ERROR')
}, 1000) 
})
return promise
}

server.js文件

import http from 'http'
import { getProducts, getProduct } from './controllers/productControllers.js';
const server = http.createServer((req, res) => {
if(req.url === '/api/products' && req.method === 'GET'){
getProducts(req, res)
}else if(req.url.match(//api/products/([0-9]+)/) && req.method === 'GET'){
const id = req.url.split('/')[3]
getProduct(req, res, id)
}
else{
res.writeHead(200, { 'Content-Type': 'text/html' });
res.end("Not found");
}
});
const port = process.env.PORT || 8000

server.listen(port, () => {console.log(`Server running on port ${8000}`)});

您从req.url.split('/')[3]得到的idstring,但您模型中的产品id是numbers。如果两个操作数具有不同的类型,则将===false进行比较。因此,您的比较将始终返回false,您将找不到产品。使用

const id = +(req.url.split('/')[3])

,这将使id成为一个数字。

似乎是你比较stringnumber。因此"1" === 1 // false.

尝试使用parseInt()将id从路径转换为Int,然后将其传递给函数

const id = parseInt(req.url.split('/')[3], 10)

最新更新