我开始学习Node.我正在尝试使用 MySQL 为图书应用程序创建 RESTful API,因此在我的 Books.js 文件中我有以下代码:(我正在使用 esm 来启用导入/导出)import express from 'express';import mysqlConnection from '../database';const router = express.Router()router.get('/', (req,res) => { mysqlConnection.query('SELECT * FROM book', (err, rows, fields) => { if(!err){ res.json(rows); } else{ console.log(err); } })});router.get('/:id', (req, res)=> { const {id} = req.params; console.log('id is:',id); mysqlConnection.query(`SELECT * FROM book WHERE isbn ='${id}'`, (err, rows, fields)=> { if(!err){ res.json(rows); } else{ console.log(err); } })})export default router;例如,当我访问“http://localhost:3000/123-456-789-13”时,我在控制台中得到以下日志:server started!connected to DB!id is: 123-456-789-13id is: favicon.ico它没有失败,但我很惊讶地看到这一点......知道我做错了什么吗?
1 回答
海绵宝宝撒
TA贡献1809条经验 获得超8个赞
浏览器会自动请求/favicon.ico
尝试获取代表该网站的缩略图。
但是,您有一个顶级通配符路由:
router.get('/:id', (req, res)=> { ...});
它匹配顶层的所有内容,包括/favicon.ico
. 一般来说,像这样的顶级通配符路由会带来麻烦,因为它们与所有顶级 URL 匹配,因此不允许网站上任何其他顶级路由。它们不仅匹配诸如 之类的内容/favicon.ico
,而且还匹配/robots.txt
搜索引擎可能请求的内容,并且它与您将来添加其他顶级路由相冲突。
一般来说,建议您首先提供一些资源名称,例如:
router.get('/book/:id', (req, res)=> { ...});
这样,您就不会与其他顶级路线发生任何冲突。
添加回答
举报
0/150
提交
取消