<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>简单教程</title>
<subtitle>简单教程，简单编程</subtitle>
<link rel="alternate" type="text/html" href="http://www.twle.cn/" />
<link rel="self" type="application/atom+xml" href="http://www.twle.cn/index.xml" />
<id>http://www.twle.cn/</id>
<updated>Apr 16, 2026</updated>
<rights>Copyright © 2010-2012, 简单教程</rights>
<entry>
	<title>[SpringBoot] SpringBoot 3/4  与 Kafka 的简单使用</title>
	<link rel="alternate" type="text/html" href="http://www.twle.cn/t/90634#reply0" />
	<id>tag:www.twle.cn,Dec 11, 2025:/t/90634</id>
	<published>Dec 11, 2025</published>
	<updated>Dec 11, 2025</updated>
	<author>
		<name>yufei</name>
		<uri>http://www.twle.cn/member/yufei</uri>
	</author>
	<content type="html" xml:base="http://www.twle.cn/" xml:lang="en"><![CDATA[
	1. 首先在 [https://start.spring.io/](https://start.spring.io/) 里选择 `Spring for Apache Kafka` 和 `Spring Web` ( 仅做测试用)\u000D\u000A\u000D\u000A2. 然后添加 `com.fasterxml.jackson` 相关依赖。完成后配置 `pom.xml` 里的 `dependencies`  类似\u000D\u000A\u000D\u000A            \u003Cdependencies\u003E\u000D\u000A                \u003Cdependency\u003E\u000D\u000A                    \u003CgroupId\u003Eorg.springframework.boot\u003C/groupId\u003E\u000D\u000A                    \u003CartifactId\u003Espring\u002Dboot\u002Dstarter\u002Dkafka\u003C/artifactId\u003E\u000D\u000A                \u003C/dependency\u003E\u000D\u000A                \u003Cdependency\u003E\u000D\u000A                    \u003CgroupId\u003Ecom.fasterxml.jackson.core\u003C/groupId\u003E\u000D\u000A                    \u003CartifactId\u003Ejackson\u002Ddatabind\u003C/artifactId\u003E\u000D\u000A                    \u003Cversion\u003E2.20.1\u003C/version\u003E\u000D\u000A                \u003C/dependency\u003E\u000D\u000A                \u003Cdependency\u003E\u000D\u000A                    \u003CgroupId\u003Ecom.fasterxml.jackson.core\u003C/groupId\u003E\u000D\u000A                    \u003CartifactId\u003Ejackson\u002Dcore\u003C/artifactId\u003E\u000D\u000A                    \u003Cversion\u003E2.20.1\u003C/version\u003E\u000D\u000A                \u003C/dependency\u003E\u000D\u000A                \u003Cdependency\u003E\u000D\u000A                    \u003CgroupId\u003Ecom.fasterxml.jackson.core\u003C/groupId\u003E\u000D\u000A                    \u003CartifactId\u003Ejackson\u002Dannotations\u003C/artifactId\u003E\u000D\u000A                    \u003Cversion\u003E2.20\u003C/version\u003E\u000D\u000A                \u003C/dependency\u003E\u000D\u000A                \u003Cdependency\u003E\u000D\u000A                    \u003CgroupId\u003Eorg.springframework.boot\u003C/groupId\u003E\u000D\u000A                    \u003CartifactId\u003Espring\u002Dboot\u002Dstarter\u002Dwebmvc\u003C/artifactId\u003E\u000D\u000A                \u003C/dependency\u003E\u000D\u000A\u000D\u000A                \u003Cdependency\u003E\u000D\u000A                    \u003CgroupId\u003Eorg.projectlombok\u003C/groupId\u003E\u000D\u000A                    \u003CartifactId\u003Elombok\u003C/artifactId\u003E\u000D\u000A                    \u003Coptional\u003Etrue\u003C/optional\u003E\u000D\u000A                \u003C/dependency\u003E\u000D\u000A                \u003Cdependency\u003E\u000D\u000A                    \u003CgroupId\u003Eorg.springframework.boot\u003C/groupId\u003E\u000D\u000A                    \u003CartifactId\u003Espring\u002Dboot\u002Dstarter\u002Dkafka\u002Dtest\u003C/artifactId\u003E\u000D\u000A                    \u003Cscope\u003Etest\u003C/scope\u003E\u000D\u000A                \u003C/dependency\u003E\u000D\u000A                \u003Cdependency\u003E\u000D\u000A                    \u003CgroupId\u003Eorg.springframework.boot\u003C/groupId\u003E\u000D\u000A                    \u003CartifactId\u003Espring\u002Dboot\u002Dstarter\u002Dwebmvc\u002Dtest\u003C/artifactId\u003E\u000D\u000A                    \u003Cscope\u003Etest\u003C/scope\u003E\u000D\u000A                \u003C/dependency\u003E\u000D\u000A            \u003C/dependencies\u003E\u000D\u000A\u000D\u000A3. 配置 `application.yml` 添加 Kafka 相关配置\u000D\u000A\u000D\u000A        spring:\u000D\u000A          kafka:\u000D\u000A            consumer:\u000D\u000A              bootstrap\u002Dservers: localhost:9092\u000D\u000A              # 配置消费者消息offset是否自动重置(消费者重连会能够接收最开始的消息)\u000D\u000A              auto\u002Doffset\u002Dreset: earliest\u000D\u000A            producer:\u000D\u000A              bootstrap\u002Dservers: localhost:9092\u000D\u000A              # 发送的对象信息变为json格式\u000D\u000A              value\u002Dserializer: org.springframework.kafka.support.serializer.JsonSerializer\u000D\u000A        kafka:\u000D\u000A          topic:\u000D\u000A            my\u002Dtopic: my\u002Dtopic\u000D\u000A            my\u002Dtopic2: my\u002Dtopic2\u000D\u000A\u000D\u000A4. 添加配置类 `KafkaConfig.java` \u000D\u000A\u000D\u000A        package me.try4.hss.kafka.config\u003B\u000D\u000A\u000D\u000A        import org.apache.kafka.clients.admin.NewTopic\u003B\u000D\u000A        import org.springframework.beans.factory.annotation.Value\u003B\u000D\u000A        import org.springframework.context.annotation.Bean\u003B\u000D\u000A        import org.springframework.context.annotation.Configuration\u003B\u000D\u000A        import org.springframework.kafka.support.converter.RecordMessageConverter\u003B\u000D\u000A        import org.springframework.kafka.support.converter.StringJacksonJsonMessageConverter\u003B\u000D\u000A\u000D\u000A        @<a href="/member/Configuration">Configuration</a>\u000D\u000A        public class KafkaConfig {\u000D\u000A\u000D\u000A            @<a href="/member/Value">Value</a>(\u0022${kafka.topic.my\u002Dtopic}\u0022)\u000D\u000A            String myTopic\u003B\u000D\u000A\u000D\u000A            @<a href="/member/Value">Value</a>(\u0022${kafka.topic.my\u002Dtopic2}\u0022)\u000D\u000A            String myTopic2\u003B\u000D\u000A\u000D\u000A            /**\u000D\u000A             * JSON消息转换器\u000D\u000A             */\u000D\u000A            @<a href="/member/Bean">Bean</a>\u000D\u000A            public RecordMessageConverter jsonConverter() {\u000D\u000A                return new StringJacksonJsonMessageConverter()\u003B\u000D\u000A            }\u000D\u000A\u000D\u000A            /**\u000D\u000A             * 通过注入一个 NewTopic 类型的 Bean 来创建 topic，如果 topic 已存在，则会忽略。\u000D\u000A             */\u000D\u000A            @<a href="/member/Bean">Bean</a>\u000D\u000A            public NewTopic myTopic() {\u000D\u000A                return new NewTopic(myTopic, 2, (short) 1)\u003B\u000D\u000A            }\u000D\u000A\u000D\u000A            @<a href="/member/Bean">Bean</a>\u000D\u000A            public NewTopic myTopic2() {\u000D\u000A                return new NewTopic(myTopic2, 1, (short) 1)\u003B\u000D\u000A            }\u000D\u000A        }\u000D\u000A\u000D\u000A5. 添加消息实体\u000D\u000A\u000D\u000A\u000D\u000A        package me.try4.hss.kafka.config\u003B\u000D\u000A\u000D\u000A        import org.apache.kafka.clients.admin.NewTopic\u003B\u000D\u000A        import org.springframework.beans.factory.annotation.Value\u003B\u000D\u000A        import org.springframework.context.annotation.Bean\u003B\u000D\u000A        import org.springframework.context.annotation.Configuration\u003B\u000D\u000A        import org.springframework.kafka.support.converter.RecordMessageConverter\u003B\u000D\u000A        import org.springframework.kafka.support.converter.StringJacksonJsonMessageConverter\u003B\u000D\u000A\u000D\u000A        @<a href="/member/Configuration">Configuration</a>\u000D\u000A        public class KafkaConfig {\u000D\u000A\u000D\u000A            @<a href="/member/Value">Value</a>(\u0022${kafka.topic.my\u002Dtopic}\u0022)\u000D\u000A            String myTopic\u003B\u000D\u000A\u000D\u000A            @<a href="/member/Value">Value</a>(\u0022${kafka.topic.my\u002Dtopic2}\u0022)\u000D\u000A            String myTopic2\u003B\u000D\u000A\u000D\u000A            /**\u000D\u000A             * JSON消息转换器\u000D\u000A             */\u000D\u000A            @<a href="/member/Bean">Bean</a>\u000D\u000A            public RecordMessageConverter jsonConverter() {\u000D\u000A                return new StringJacksonJsonMessageConverter()\u003B\u000D\u000A            }\u000D\u000A\u000D\u000A            /**\u000D\u000A             * 通过注入一个 NewTopic 类型的 Bean 来创建 topic，如果 topic 已存在，则会忽略。\u000D\u000A             */\u000D\u000A            @<a href="/member/Bean">Bean</a>\u000D\u000A            public NewTopic myTopic() {\u000D\u000A                return new NewTopic(myTopic, 2, (short) 1)\u003B\u000D\u000A            }\u000D\u000A\u000D\u000A            @<a href="/member/Bean">Bean</a>\u000D\u000A            public NewTopic myTopic2() {\u000D\u000A                return new NewTopic(myTopic2, 1, (short) 1)\u003B\u000D\u000A            }\u000D\u000A        }\u000D\u000A\u000D\u000A6. 添加生产者\u000D\u000A\u000D\u000A        package me.try4.hss.kafka.service\u003B\u000D\u000A\u000D\u000A        import lombok.extern.slf4j.Slf4j\u003B\u000D\u000A        import org.apache.kafka.clients.producer.ProducerRecord\u003B\u000D\u000A        import org.springframework.kafka.core.KafkaTemplate\u003B\u000D\u000A        import org.springframework.kafka.support.SendResult\u003B\u000D\u000A        import org.springframework.stereotype.Service\u003B\u000D\u000A\u000D\u000A        import java.util.concurrent.CompletableFuture\u003B\u000D\u000A\u000D\u000A        @<a href="/member/Service">Service</a>\u000D\u000A        @<a href="/member/Slf4j">Slf4j</a>\u000D\u000A        public class BookProducerService {\u000D\u000A\u000D\u000A            private final KafkaTemplate\u003CString, Object\u003E kafkaTemplate\u003B\u000D\u000A\u000D\u000A            public BookProducerService(KafkaTemplate\u003CString, Object\u003E kafkaTemplate) {\u000D\u000A                this.kafkaTemplate \u003D kafkaTemplate\u003B\u000D\u000A            }\u000D\u000A\u000D\u000A\u000D\u000A            public void sendMessage(String topic, Object o) {\u000D\u000A                // 分区编号最好为 null，交给 kafka 自己去分配\u000D\u000A                ProducerRecord\u003CString, Object\u003E producerRecord \u003D new ProducerRecord\u003C\u003E(topic, null, System.currentTimeMillis(), String.valueOf(o.hashCode()), o)\u003B\u000D\u000A\u000D\u000A                CompletableFuture\u003CSendResult\u003CString, Object\u003E\u003E future \u003D kafkaTemplate.send(producerRecord)\u003B\u000D\u000A\u000D\u000A                future.thenApply(\u000D\u000A                        result \u002D\u003E {\u000D\u000A                            log.info(\u0022生产者成功发送消息到topic:{} partition:{}的消息\u0022, result.getRecordMetadata().topic(), result.getRecordMetadata().partition())\u003B\u000D\u000A                            return \u0022\u0022\u003B\u000D\u000A                        })\u000D\u000A                        .exceptionally(\u000D\u000A                        ex \u002D\u003E {\u000D\u000A                            log.error(\u0022生产者发送消失败，原因：{}\u0022, ex.getMessage())\u003B\u000D\u000A                            return null\u003B\u000D\u000A                        }\u000D\u000A                        )\u003B\u000D\u000A            }\u000D\u000A        }\u000D\u000A\u000D\u000A7. 添加消费者\u000D\u000A\u000D\u000A        package me.try4.hss.kafka.service\u003B\u000D\u000A\u000D\u000A        import com.fasterxml.jackson.core.JsonProcessingException\u003B\u000D\u000A        import com.fasterxml.jackson.databind.ObjectMapper\u003B\u000D\u000A        import lombok.extern.slf4j.Slf4j\u003B\u000D\u000A        import me.try4.hss.kafka.entity.Book\u003B\u000D\u000A        import org.apache.kafka.clients.consumer.ConsumerRecord\u003B\u000D\u000A        import org.springframework.beans.factory.annotation.Value\u003B\u000D\u000A        import org.springframework.kafka.annotation.KafkaListener\u003B\u000D\u000A        import org.springframework.stereotype.Service\u003B\u000D\u000A\u000D\u000A        @<a href="/member/Service">Service</a>\u000D\u000A        @<a href="/member/Slf4j">Slf4j</a>\u000D\u000A        public class BookConsumerService {\u000D\u000A\u000D\u000A            @<a href="/member/Value">Value</a>(\u0022${kafka.topic.my\u002Dtopic}\u0022)\u000D\u000A            private String myTopic\u003B\u000D\u000A\u000D\u000A            @<a href="/member/Value">Value</a>(\u0022${kafka.topic.my\u002Dtopic2}\u0022)\u000D\u000A            private String myTopic2\u003B\u000D\u000A\u000D\u000A            private final ObjectMapper objectMapper \u003D new ObjectMapper()\u003B\u000D\u000A\u000D\u000A            @<a href="/member/KafkaListener">KafkaListener</a>(topics \u003D {\u0022${kafka.topic.my\u002Dtopic}\u0022}, groupId \u003D \u0022group1\u0022)\u000D\u000A            public void consumeMessage(ConsumerRecord\u003CString, String\u003E bookConsumerRecord) {\u000D\u000A                try {\u000D\u000A                    Book book \u003D objectMapper.readValue(bookConsumerRecord.value(), Book.class)\u003B\u000D\u000A                    log.info(\u0022消费者消费topic:{} partition:{}的消息 \u002D\u003E {}\u0022, bookConsumerRecord.topic(), bookConsumerRecord.partition(), book.toString())\u003B\u000D\u000A                } catch (JsonProcessingException e) {\u000D\u000A                    e.printStackTrace()\u003B\u000D\u000A                }\u000D\u000A            }\u000D\u000A\u000D\u000A            @<a href="/member/KafkaListener">KafkaListener</a>(topics \u003D {\u0022${kafka.topic.my\u002Dtopic2}\u0022}, groupId \u003D \u0022group2\u0022)\u000D\u000A            public void consumeMessage2(Book book) {\u000D\u000A                log.info(\u0022消费者消费{}的消息 \u002D\u003E {}\u0022, myTopic2, book.toString())\u003B\u000D\u000A            }\u000D\u000A        }\u000D\u000A\u000D\u000A8. 添加控制器\u000D\u000A\u000D\u000A        package me.try4.hss.kafka.controller\u003B\u000D\u000A\u000D\u000A        import lombok.RequiredArgsConstructor\u003B\u000D\u000A        import me.try4.hss.kafka.entity.Book\u003B\u000D\u000A        import me.try4.hss.kafka.service.BookProducerService\u003B\u000D\u000A        import org.apache.kafka.clients.admin.NewTopic\u003B\u000D\u000A        import org.springframework.beans.factory.annotation.Autowired\u003B\u000D\u000A        import org.springframework.beans.factory.annotation.Value\u003B\u000D\u000A        import org.springframework.util.StringUtils\u003B\u000D\u000A        import org.springframework.web.bind.annotation.GetMapping\u003B\u000D\u000A        import org.springframework.web.bind.annotation.RequestMapping\u003B\u000D\u000A        import org.springframework.web.bind.annotation.RequestParam\u003B\u000D\u000A        import org.springframework.web.bind.annotation.RestController\u003B\u000D\u000A\u000D\u000A        import java.util.Random\u003B\u000D\u000A        import java.util.concurrent.atomic.AtomicLong\u003B\u000D\u000A\u000D\u000A        @<a href="/member/RestController">RestController</a>\u000D\u000A        @<a href="/member/RequiredArgsConstructor">RequiredArgsConstructor</a>\u000D\u000A        @<a href="/member/RequestMapping">RequestMapping</a>(\u0022message\u0022)\u000D\u000A        public class MessageController {\u000D\u000A\u000D\u000A            @<a href="/member/Value">Value</a>(\u0022${kafka.topic.my\u002Dtopic}\u0022)\u000D\u000A            String myTopic\u003B\u000D\u000A\u000D\u000A            private final BookProducerService bookProducerService\u003B\u000D\u000A\u000D\u000A\u000D\u000A            private AtomicLong atomicLong \u003D new AtomicLong()\u003B\u000D\u000A\u000D\u000A            @<a href="/member/GetMapping">GetMapping</a>(\u0022send\u0022)\u000D\u000A            public String send(@<a href="/member/RequestParam">RequestParam</a> String msg) {\u000D\u000A\u000D\u000A                Book newBook \u003D Book.builder().id(atomicLong.addAndGet(1)).name(msg).build()\u003B\u000D\u000A                bookProducerService.sendMessage(myTopic,newBook)\u003B\u000D\u000A                return \u0022ok\u0022\u003B\u000D\u000A            }\u000D\u000A        }\u000D\u000A\u000D\u000A\u000D\u000A9. 程序起来后，访问下面的网页，就可以看到消息了\u000D\u000A\u000D\u000A\u0009[http://localhost:9090/message/send?msg\u003Doka1](http://localhost:9090/message/send?msg\u003Doka1)
	]]></content>
</entry><entry>
	<title>[Nginx] nginx proxy  post 丢失参数/body 怎么解决（1） ？</title>
	<link rel="alternate" type="text/html" href="http://www.twle.cn/t/90631#reply0" />
	<id>tag:www.twle.cn,Sep 18, 2025:/t/90631</id>
	<published>Sep 18, 2025</published>
	<updated>Sep 18, 2025</updated>
	<author>
		<name>yufei</name>
		<uri>http://www.twle.cn/member/yufei</uri>
	</author>
	<content type="html" xml:base="http://www.twle.cn/" xml:lang="en"><![CDATA[
	如果你用 Nginx 反向代理了一层，而且你的反向代理是抄过来的，如果 GET 请求正常，但是 POST 请求丢失参数，丢失 body 那么可能是下面的原因造成的：\u000D\u000A\u000D\u000A\u000D\u000A```\u000D\u000Aproxy_set_header Connection \u0022upgrade\u0022\u003B\u000D\u000Aproxy_set_header Upgrade $http_upgrade\u003B\u000D\u000A```\u000D\u000A\u000D\u000A这两句有什么问题呢？\u000D\u000A\u000D\u000A1. `proxy_set_header Upgrade $http_upgrade` 这句话的意思是按照客户端请求来，没问题，但是\u000D\u000A2. `proxy_set_header Connection \u0022upgrade\u0022` 则始终开启 WebSocket。\u000D\u000A\u000D\u000A解决办法如下\u000D\u000A\u000D\u000A1. 首先在 `server {}` 平级添加一句\u000D\u000A\u000D\u000A```\u000D\u000A$connection_upgrade {\u000D\u000A    default upgrade\u003B\u000D\u000A    \u0027\u0027      close\u003B\u000D\u000A} \u000D\u000A```\u000D\u000A\u000D\u000A然后将 `proxy_set_header Connection \u0022upgrade\u0022` 改成 `proxy_set_header Connection $connection_upgrade\u003B`\u000D\u000A\u000D\u000A\u000D\u000A大概的网站配置如下\u000D\u000A\u000D\u000A```\u000D\u000A\u000D\u000A$connection_upgrade {\u000D\u000A    default upgrade\u003B\u000D\u000A    \u0027\u0027      close\u003B\u000D\u000A} \u000D\u000A\u000D\u000Aserver\u000D\u000A{\u000D\u000A\u0009listen 80\u003B\u000D\u000A    \u000D\u000A    # 其它配置\u000D\u000A\u000D\u000A    location / {\u000D\u000A        # 其它配置\u000D\u000A        proxy_set_header Upgrade $http_upgrade\u003B\u000D\u000A        proxy_set_header Connection $connection_upgrade\u003B\u000D\u000A        \u000D\u000A    }\u000D\u000A}\u000D\u000A```\u000D\u000A\u000D\u000A如果提示 `$connection_upgrade` 已经存在，把这个删了就行，说明其它网站配置已经加过这个了
	]]></content>
</entry><entry>
	<title>[JavaScript] Nuxt.js 4 (Nux4) 使用 markdown-it 动态导入 Mathjax</title>
	<link rel="alternate" type="text/html" href="http://www.twle.cn/t/90630#reply0" />
	<id>tag:www.twle.cn,Sep 08, 2025:/t/90630</id>
	<published>Sep 08, 2025</published>
	<updated>Sep 08, 2025</updated>
	<author>
		<name>yufei</name>
		<uri>http://www.twle.cn/member/yufei</uri>
	</author>
	<content type="html" xml:base="http://www.twle.cn/" xml:lang="en"><![CDATA[
	因为 Mathjax 库比较大，我们想动态导入，这个帖子就是为了解决这个问题\u000D\u000A\u000D\u000A在 Nuxt4 中如何使用 markdown\u002Dit 可以看这个帖子 [Nuxt.js 4 (Nux4) 使用 markdown\u002Dit 渲染 Markdown](https://www.twle.cn/t/90629#reply0)\u000D\u000A\u000D\u000A对了 `app/plugins/markdownit.ts` 需要做一个改变\u000D\u000A\u000D\u000A```javascript\u000D\u000A  return {\u000D\u000A    provide: {\u000D\u000A      mdRenderer: renderer,\u000D\u000A      md2Html: md2Html,\u000D\u000A    },\u000D\u000A  }\u003B\u000D\u000A```\u000D\u000A\u000D\u000A1. 安装库\u000D\u000A\u000D\u000A\u0009\u0009yarn add markdown\u002Dit\u002Dmathjax3\u000D\u000A        \u000D\u000A2.  动态导入\u000D\u000A\u000D\u000A\u0009\u000D\u000A\u000D\u000A        const { $mdRenderer } \u003D useNuxtApp()\u003B\u000D\u000A        let mathJaxLoaded \u003D false\u003B\u000D\u000A\u000D\u000A        onMounted(async () \u003D\u003E {\u000D\u000A          await loadMathJax($mdRenderer, () \u003D\u003E {\u000D\u000A            $mdRenderer.enable(\u0022linkify\u0022)\u003B\u000D\u000A            rs.value \u003D $mdRenderer.render(raw)\u003B\u000D\u000A          })\u003B\u000D\u000A        })\u003B\u000D\u000A\u000D\u000A        async function loadMathJax($md, fn) {\u000D\u000A          console.log(\u0022\u002D\u002D\u002D\u002D\u002D\u002D\u002D\u002D\u002D\u002D\u002D\u003E4444\u0022)\u003B\u000D\u000A          if (!mathJaxLoaded) {\u000D\u000A            const cs \u003D await import(\u0022markdown\u002Dit\u002Dmathjax3\u0022)\u003B\u000D\u000A            console.log(cs)\u003B\u000D\u000A            mathJaxLoaded \u003D true\u003B\u000D\u000A            $md.use(cs.default)\u003B\u000D\u000A            fn \u0026\u0026 fn()\u003B\u000D\u000A          }\u000D\u000A        }
	]]></content>
</entry><entry>
	<title>[JavaScript] Nuxt.js 4 (Nux4) 使用 markdown-it 渲染 Markdown</title>
	<link rel="alternate" type="text/html" href="http://www.twle.cn/t/90629#reply0" />
	<id>tag:www.twle.cn,Sep 01, 2025:/t/90629</id>
	<published>Sep 01, 2025</published>
	<updated>Sep 01, 2025</updated>
	<author>
		<name>yufei</name>
		<uri>http://www.twle.cn/member/yufei</uri>
	</author>
	<content type="html" xml:base="http://www.twle.cn/" xml:lang="en"><![CDATA[
	1. 安装\u000D\u000A\u0009\u000D\u000A    \u0009yarn add highlight.js\u000D\u000A    \u0009yarn add markdown\u002Dit\u000D\u000A    \u0009yarn add \u002DD @<a href="/member/types">types</a>/markdown\u002Dit\u000D\u000A        \u000D\u000A2. 制作 Nuxt 插件 plugins，文件路径为 `app/plugins/markdownit.ts`\u000D\u000A\u000D\u000A\u0009\u0009// app/plugins/markdownit.ts\u000D\u000A        import md from \u0022markdown\u002Dit\u0022\u003B\u000D\u000A        import hljs from \u0022highlight.js\u0022\u003B\u000D\u000A        import type MarkdownIt from \u0022markdown\u002Dit\u0022\u003B\u000D\u000A\u000D\u000A        export default defineNuxtPlugin(() \u003D\u003E {\u000D\u000A          const renderer: MarkdownIt \u003D md({\u000D\u000A            highlight: function (str, lang) {\u000D\u000A              if (lang \u0026\u0026 hljs.getLanguage(lang)) {\u000D\u000A                try {\u000D\u000A                  return (\u000D\u000A                    \u0027\u003Cpre\u003E\u003Ccode class\u003D\u0022hljs\u0022\u003E\u0027 +\u000D\u000A                    hljs.highlight(str, { language: lang, ignoreIllegals: true })\u000D\u000A                      .value +\u000D\u000A                    \u0022\u003C/code\u003E\u003C/pre\u003E\u0022\u000D\u000A                  )\u003B\u000D\u000A                } catch (__) {}\u000D\u000A              }\u000D\u000A\u000D\u000A              return (\u000D\u000A                \u0027\u003Cpre\u003E\u003Ccode class\u003D\u0022hljs\u0022\u003E\u0027 +\u000D\u000A                renderer.utils.escapeHtml(str) +\u000D\u000A                \u0022\u003C/code\u003E\u003C/pre\u003E\u0022\u000D\u000A              )\u003B\u000D\u000A            },\u000D\u000A          })\u003B\u000D\u000A\u000D\u000A          const md2Html \u003D (mdtext: any) \u003D\u003E {\u000D\u000A            return typeof mdtext !\u003D \u0022string\u0022\u000D\u000A              ? mdtext\u000D\u000A              : (renderer.enable(\u0022linkify\u0022), renderer.render(mdtext))\u003B\u000D\u000A          }\u003B\u000D\u000A\u000D\u000A          return {\u000D\u000A            provide: {\u000D\u000A              mdRenderer: md2Html,\u000D\u000A            },\u000D\u000A          }\u003B\u000D\u000A        })\u003B\u000D\u000A\u000D\u000A4. 在日常的 components 中使用\u000D\u000A\u0009\u0009\u000D\u000A        const content \u003D `# hello <a href="http://www.twle.cn" rel="noopener">www.twle.cn</a> #`\u000D\u000A\u0009\u0009const mdtext \u003D $mdRenderer(content)\u003B\u000D\u000A        \u000D\u000A5. 添加样式\u000D\u000A\u0009\u000D\u000A   \u003E 平时怎么加就怎么加吧
	]]></content>
</entry><entry>
	<title>[JavaScript] [Nuxt.js] 出现 ERROR [unplugin-vue-i18n] Detected HTML in (nuxt3, vite, vueI18)</title>
	<link rel="alternate" type="text/html" href="http://www.twle.cn/t/90628#reply0" />
	<id>tag:www.twle.cn,Aug 22, 2025:/t/90628</id>
	<published>Aug 22, 2025</published>
	<updated>Aug 22, 2025</updated>
	<author>
		<name>yufei</name>
		<uri>http://www.twle.cn/member/yufei</uri>
	</author>
	<content type="html" xml:base="http://www.twle.cn/" xml:lang="en"><![CDATA[
	nuxt.js + i18n 插件，如果语言文件里有 html ,就会出现 ERROR [unplugin\u002Dvue\u002Di18n] Detected HTML in (nuxt3, vite, vueI18n)\u000D\u000A\u000D\u000A解决办法就是在 `nuxt.config.js` 里的 `i18n` 添加以下内容\u000D\u000A\u000D\u000A```\u000D\u000Acompilation: {\u000D\u000A      strictMessage: false,\u000D\u000A    }\u000D\u000A```\u000D\u000A\u000D\u000A添加完成后类似于 \u000D\u000A\u000D\u000A```json\u000D\u000Ai18n: {\u000D\u000A    baseUrl: \u0027http://localhost:3000\u0027,\u000D\u000A    locales: [\u000D\u000A      { code: \u0027cn\u0027, language:\u0027zh\u002DCN\u0027,name:\u0027简体中文\u0027,file:\u0027cn.json\u0027},\u000D\u000A      { code: \u0027en\u0027, language: \u0027en\u002DUS\u0027,name:\u0027English\u0027,file:\u0027en.json\u0027}\u000D\u000A    ],\u000D\u000A    defaultLocale: \u0027cn\u0027,\u000D\u000A    compilation: {\u000D\u000A      strictMessage: false,\u000D\u000A    },\u000D\u000A  }\u000D\u000A```
	]]></content>
</entry><entry>
	<title>[JavaScript] Naive-UI  dark-theme 对 body 无效，只对样式有效的解决办法</title>
	<link rel="alternate" type="text/html" href="http://www.twle.cn/t/90627#reply0" />
	<id>tag:www.twle.cn,Aug 16, 2025:/t/90627</id>
	<published>Aug 16, 2025</published>
	<updated>Aug 16, 2025</updated>
	<author>
		<name>yufei</name>
		<uri>http://www.twle.cn/member/yufei</uri>
	</author>
	<content type="html" xml:base="http://www.twle.cn/" xml:lang="en"><![CDATA[
	Naive\u002DUI  dark\u002Dtheme 对 body 无效，只对样式有效的解决办法，就是在 `NConfigProvider` 里添加 `NGlobalStyle`\u000D\u000A\u000D\u000A例如\u000D\u000A\u000D\u000A```\u000D\u000A\u003Ctemplate\u003E\u000D\u000A  \u003Cdiv\u003E\u000D\u000A  \u003CNConfigProvider inline\u002Dtheme\u002Ddisabled :theme\u003D\u0022darkTheme\u0022\u003E\u000D\u000A    \u003Cn\u002Dmessage\u002Dprovider\u003E\u000D\u000A      \u003Cn\u002Dnotification\u002Dprovider\u003E\u000D\u000A        \u003Cn\u002Dloading\u002Dbar\u002Dprovider\u003E\u000D\u000A          \u003Cn\u002Ddialog\u002Dprovider\u003E\u000D\u000A          \u003CNuxtPage /\u003E\u000D\u000A          \u003Cn\u002Dglobal\u002Dstyle /\u003E\u000D\u000A          \u003C/n\u002Ddialog\u002Dprovider\u003E\u000D\u000A        \u003C/n\u002Dloading\u002Dbar\u002Dprovider\u003E\u000D\u000A      \u003C/n\u002Dnotification\u002Dprovider\u003E\u000D\u000A    \u003C/n\u002Dmessage\u002Dprovider\u003E\u000D\u000A  \u003C/NConfigProvider\u003E\u000D\u000A  \u003C/div\u003E\u000D\u000A\u003C/template\u003E\u000D\u000A```
	]]></content>
</entry><entry>
	<title>[JavaScript] Nuxt.js 4 出现 `Named export &#39;VResizeObserver&#39; not found. The requested module &#39;vueuc&#39; is a CommonJS module` 错误</title>
	<link rel="alternate" type="text/html" href="http://www.twle.cn/t/90626#reply0" />
	<id>tag:www.twle.cn,Aug 16, 2025:/t/90626</id>
	<published>Aug 16, 2025</published>
	<updated>Aug 16, 2025</updated>
	<author>
		<name>yufei</name>
		<uri>http://www.twle.cn/member/yufei</uri>
	</author>
	<content type="html" xml:base="http://www.twle.cn/" xml:lang="en"><![CDATA[
	今天用 Nuxt.js 最新版开发一个新的项目出现了以下错误\u000D\u000A\u000D\u000A```\u000D\u000ANamed export \u0027VResizeObserver\u0027 not found. The requested module \u0027vueuc\u0027 is a CommonJS module, which may not support all module.exports as named exports.\u005Cn\u0022 +\u000D\u000A  \u0027CommonJS modules can always be imported via the default export, for example using:\u005Cn\u0027 +\u000D\u000A  \u0027\u005Cn\u0027 +\u000D\u000A  \u0022import pkg from \u0027vueuc\u0027\u003B\u005Cn\u0022 +\u000D\u000A  \u0027const { VResizeObserver } \u003D pkg\u003B\u005Cn\u0027 +\u000D\u000A  \u0027\u005Cn\u000D\u000A```\u000D\u000A\u000D\u000A解决办法也很简单，就是在 `nuxt.config.js` 中添加以下配置\u000D\u000A\u000D\u000A```ts\u000D\u000Abuild: {\u000D\u000A    transpile:[\u0027naive\u002Dui\u0027,\u0027vueuc\u0027]\u000D\u000A},\u000D\u000A```\u000D\u000A\u000D\u000A配置完后， nuxt.config.js 大概就是下面这个样子\u000D\u000A\u000D\u000A```\u000D\u000Aimport AutoImport from \u0027unplugin\u002Dauto\u002Dimport/vite\u0027\u000D\u000Aimport { NaiveUiResolver } from \u0027unplugin\u002Dvue\u002Dcomponents/resolvers\u0027\u000D\u000Aimport Components from \u0027unplugin\u002Dvue\u002Dcomponents/vite\u0027\u000D\u000A\u000D\u000A// <a href="https://nuxt.com/docs/api/configuration/nuxt\u002Dconfig\u000D\u000Aexport" rel="noopener">https://nuxt.com/docs/api/configuration/nuxt\u002Dconfig\u000D\u000Aexport</a> default defineNuxtConfig({\u000D\u000A  compatibilityDate: \u00272025\u002D07\u002D15\u0027,\u000D\u000A  devtools: { enabled: true },\u000D\u000A  build: {\u000D\u000A    transpile:[\u0027naive\u002Dui\u0027,\u0027vueuc\u0027]\u000D\u000A  },\u000D\u000A  modules: [\u0027nuxtjs\u002Dnaive\u002Dui\u0027],\u000D\u000A  vite: {\u000D\u000A    plugins: [\u000D\u000A      AutoImport({\u000D\u000A        imports: [\u000D\u000A          {\u000D\u000A            \u0027naive\u002Dui\u0027: [\u000D\u000A              \u0027useDialog\u0027,\u000D\u000A              \u0027useMessage\u0027,\u000D\u000A              \u0027useNotification\u0027,\u000D\u000A              \u0027useLoadingBar\u0027\u000D\u000A            ]\u000D\u000A          }\u000D\u000A        ]\u000D\u000A      }),\u000D\u000A      Components({\u000D\u000A        resolvers: [NaiveUiResolver()]\u000D\u000A      })\u000D\u000A    ]\u000D\u000A  }\u000D\u000A})\u000D\u000A```\u000D\u000A\u000D\u000A\u003E 你的配置可能和我不一样，因为我用了 `naive ui` 的缘故
	]]></content>
</entry><entry>
	<title>[SpringBoot] Mybatis-Plus lambdaquerywrapper 出现 column &#39;id&#39; in where clause is ambiguous 要怎么做</title>
	<link rel="alternate" type="text/html" href="http://www.twle.cn/t/90625#reply0" />
	<id>tag:www.twle.cn,Mar 28, 2025:/t/90625</id>
	<published>Mar 28, 2025</published>
	<updated>Mar 28, 2025</updated>
	<author>
		<name>yufei</name>
		<uri>http://www.twle.cn/member/yufei</uri>
	</author>
	<content type="html" xml:base="http://www.twle.cn/" xml:lang="en"><![CDATA[
	有很多方法，我觉得都不太理想。最理想的方法就是重写字段备注\u000D\u000A\u000D\u000A```\u000D\u000A@<a href="/member/TableId">TableId</a>(type \u003D IdType.ASSIGN_ID,value \u003D \u0022t_order.id\u0022)\u000D\u000A@<a href="/member/ApiModelProperty">ApiModelProperty</a>(value \u003D \u0022主键\u0022)\u000D\u000Aprivate String id\u003B\u000D\u000A```
	]]></content>
</entry><entry>
	<title>[问与答] 一直在 CC 攻击的那个，你傻逼么</title>
	<link rel="alternate" type="text/html" href="http://www.twle.cn/t/90624#reply1" />
	<id>tag:www.twle.cn,Jan 24, 2024:/t/90624</id>
	<published>Jan 24, 2024</published>
	<updated>Jan 24, 2024</updated>
	<author>
		<name>yufei</name>
		<uri>http://www.twle.cn/member/yufei</uri>
	</author>
	<content type="html" xml:base="http://www.twle.cn/" xml:lang="en"><![CDATA[
	一直在 CC 攻击的那个，你傻逼么
	]]></content>
</entry><entry>
	<title>[MacOS] iPhone显示“连接Apple ID服务器时出错”怎么办？</title>
	<link rel="alternate" type="text/html" href="http://www.twle.cn/t/90618#reply3" />
	<id>tag:www.twle.cn,Oct 18, 2023:/t/90618</id>
	<published>Oct 18, 2023</published>
	<updated>Oct 18, 2023</updated>
	<author>
		<name>yufei</name>
		<uri>http://www.twle.cn/member/yufei</uri>
	</author>
	<content type="html" xml:base="http://www.twle.cn/" xml:lang="en"><![CDATA[
	### iPhone 显示“连接Apple ID服务器时出错”怎么办？\u000D\u000A\u000D\u000A\u003E 轻点“设置”\u003E“无线局域网”\u003E“使用无线局域网与蜂窝网络的 App”，在“将数据用于”表单中，找到“设置”，然后确保其选项为“WLAN 与蜂窝网络”
	]]></content>
</entry>
</feed>