node.js - nodejs api未显示特定产品ID的产品
问题描述
我正在尝试创建一个基本的 nodejs API(无框架)
我的文件夹结构是
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 suscipit\nsuscipit recusandae consequuntur expedita et cum\nreprehenderit molestiae ut ut quas totam\nnostrum rerum est autem sunt rem eveniet architecto"
},
{
"userId": 1,
"id": 2,
"title": "qui est esse",
"body": "est rerum tempore vitae\nsequi sint nihil reprehenderit dolor beatae ea dolores neque\nfugiat blanditiis voluptate porro vel nihil molestiae ut reiciendis\nqui 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 iure\nvoluptatem occaecati omnis eligendi aut ad\nvoluptatem doloribus vel accusantium quis pariatur\nmolestiae porro eius odio et labore et velit aut"
},
{
"userId": 1,
"id": 4,
"title": "eum et est occaecati",
"body": "ullam et saepe reiciendis voluptatem adipisci\nsit amet autem assumenda provident rerum culpa\nquis hic commodi nesciunt rem tenetur doloremque ipsam iure\nquis 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}`)});
解决方案
似乎是您正在将 astring
与 a进行比较number
。因此"1" === 1 // false
。
尝试使用parseInt()id
将路径从路径转换为 Int ,然后将其传递给您的函数
const id = parseInt(req.url.split('/')[3], 10)
推荐阅读
- python-3.x - 根据条件填充多个数据框列中的空值
- python - Python 中的 ElasticNetCV 与 R 中的 cvglmnet
- azure-application-insights - 当两个不同的应用程序提供相同的版本时,连续导出如何工作?
- snowflake-cloud-data-platform - 变体列不存储具有 NaN 值的元素
- css - 如何使 Docusaurus 与本地 CSS 文件一起使用?
- javascript - 如何使用 mongoose 为已创建的文档编写子文档
- c# - 如何在 Unity 中显示一个概述的 GUI 框?
- python - 如何减少执行此三元组计数功能所需的复杂性/时间?
- reactjs - ReactJs 添加多个带上下文的减速器
- javascript - 如何使用 React 操作 HTML 元素并设置它们的样式