为了账号安全,请及时绑定邮箱和手机立即绑定

favicon.ico 作为节点中的 url 参数传递

favicon.ico 作为节点中的 url 参数传递

ibeautiful 2023-06-29 22:24:48
我开始学习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)=> { ...});

这样,您就不会与其他顶级路线发生任何冲突。


查看完整回答
反对 回复 2023-06-29
  • 1 回答
  • 0 关注
  • 108 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信