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

我开始学习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-13

id is: favicon.ico

它没有失败,但我很惊讶地看到这一点......知道我做错了什么吗?


ibeautiful
浏览 146回答 1
1回答

海绵宝宝撒

浏览器会自动请求/favicon.ico尝试获取代表该网站的缩略图。但是,您有一个顶级通配符路由:router.get('/:id', (req, res)=> { ...});它匹配顶层的所有内容,包括/favicon.ico. 一般来说,像这样的顶级通配符路由会带来麻烦,因为它们与所有顶级 URL 匹配,因此不允许网站上任何其他顶级路由。它们不仅匹配诸如 之类的内容/favicon.ico,而且还匹配/robots.txt搜索引擎可能请求的内容,并且它与您将来添加其他顶级路由相冲突。一般来说,建议您首先提供一些资源名称,例如:router.get('/book/:id', (req, res)=> { ...});这样,您就不会与其他顶级路线发生任何冲突。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript