nuxt3:我们开始吧-开发-配置-部署

一、背景介绍

2022 年 11 月 16 日,全球最大的 Nuxt 会议 Nuxt Nation 2022 在线举行,并正式发布了 Nuxt.js 3.0 的第一个稳定版本。Nuxt 3 是基于 ViteVue3 和 Nitro 的 Nuxt 框架的现代重写,具有一流的 Typescript 支持,是两年多研究、社区反馈、创新和实验的结果。为每个人提供了一个愉快的 Vue 全栈开发体验。

因为nuxt优越的服务端渲染能力,所以对于nuxt3项目关注已久!我们开始吧!

nuxt3:我们开始吧-开发-配置-部署_第1张图片

二、官方网址

Nuxt 3 - 中文文档

Nuxt - The Intuitive Vue Framework

Announcing 3.0 · Nuxt

Nuxt - Installation

https://github.com/nuxt/create-nuxt-app/blob/master/README.md

三、新特性介绍

1、更轻量:以现代浏览器为目标的服务器部署和客户端产物最多可缩小 75 倍
2、更快:基于 nitro 提供动态代码分割能力,以优化冷启动性能
3、Hybrid:增量静态生成和其他的高级功能现在都成为可能
4、Suspense:在任意组件和导航前后都可以获取数据
5、Composition API:使用 Composition API 和 Nuxt 3 的 composables 实现真正的代码复用
6、Nuxt CLI:没有任何依赖,帮你轻松搭建项目和集成模块
7、Nuxt Devtools:通过直接在浏览器中查看信息和快速修复实现更快地工作
8、Nuxt Kit:具有 Typescript 和跨版本兼容性的全新模块开发
9、Webpack 5:更快的构建时间和更小的包大小,无需配置
10、Vite:使用 Vite 作为打包工具,体验闪电般快速的 HMR
11、Vue 3:Vue 3 是你下一个 Web 应用程序的坚实基础
12、TypeScript:使用原生 TypeScript 和 ESM 构建,无需额外步骤

Nuxt 3.0 稳定版正式发布,基于 Vue 3 的 Web 框架

四、重要概念

SPA应用:也就是单页应用,这些多是在客户端的应用,不能进行SEO优化(搜索引擎优化)。

SSR应用:在服务端进行渲染,渲染完成后返回给客户端,每个页面有独立的URL,对SEO友好。

约定式路由:不需要配置路由,在根目录pages目录下创建业务页面,即可访问。

约定式配置:如layouts布局、middleware、plugins

五、启动基础项目

https://github.com/nuxt/create-nuxt-app/blob/master/README.md

5.1、创建项目:

创建nuxt3项目:

pnpm dlx nuxi init nuxt-app

 npx nuxi init nuxt3-app

5.2、安装依赖

pnpm install --shamefully-hoist

5.3、启动项目

nuxt3:我们开始吧-开发-配置-部署_第2张图片

启动成功

六、项目配置、基础使用

6.1、访问pages/index.vue

根目录app.vue,替换为:


pages/index.vue





pages/about.vue  





这样就可以访问页面了:

nuxt3:我们开始吧-开发-配置-部署_第3张图片

nuxt3:我们开始吧-开发-配置-部署_第4张图片

6.2、动态路由

6.2.1、目录结构

nuxt3:我们开始吧-开发-配置-部署_第5张图片

6.2.2、访问:/user

如果没有pages/user/index页面,只有[id].vue,访问的时候式404页面

nuxt3:我们开始吧-开发-配置-部署_第6张图片

6.2.3、访问:/user/1,动态路由,获取动态路由参数

{{$route.params.id}}

nuxt3:我们开始吧-开发-配置-部署_第7张图片

6.2.4、访问:/user/1?name=snow,动态路由,获取路由普通参数:

{{$route.query.name}}

nuxt3:我们开始吧-开发-配置-部署_第8张图片

 6.2.5、通过useRoute()获取路由信息

const route = useRoute()





nuxt3:我们开始吧-开发-配置-部署_第9张图片

6.3、路由跳转

经过测试一下几种方式均成功跳转。页面内容均正常展示。

6.3.1、

user-id

6.3.2、 

user-id-2

6.3.3、

user-id-3

6.3.4、编程式路由

6.4、加载静态资源

nginx nginx

nuxt3:我们开始吧-开发-配置-部署_第10张图片

 nuxt项目tsconfig.json有配置,public目录下的文件可以省略/public目录,我这里测试不可以,后续会再研究

已测试成功,可以省略 “~/public” 目录

nuxt3:我们开始吧-开发-配置-部署_第11张图片

6.5、设置页面title,不会在页面展示,只会在页面title部分展示

6.5.1、

snow-title





如图:

nuxt3:我们开始吧-开发-配置-部署_第12张图片

 ctrl + u:

nuxt3:我们开始吧-开发-配置-部署_第13张图片

 6.5.2、使用useHead()方法

useHead({
    title: 'snow-title-2'
})

nuxt3:我们开始吧-开发-配置-部署_第14张图片

设置成功,useHead优先级小于标签。</p> <p>6.5.3、同理使用useHead设置页面的TDK信息</p> <pre><code><script setup lang="ts"> useHead({ title: 'snow-title-2', meta: [ { name: 'description', content: 'snow-desc'}, { name: 'keywords', content: 'snow-kw'} ] }) </script></code></pre> <p><a href="http://img.e-com-net.com/image/info8/28feda428ad04292ae8d512117060bbb.jpg" target="_blank"><img alt="nuxt3:我们开始吧-开发-配置-部署_第15张图片" height="151" src="http://img.e-com-net.com/image/info8/28feda428ad04292ae8d512117060bbb.jpg" width="650" style="border:1px solid black;"></a></p> <p></p> <p><strong>6.6、layouts</strong></p> <p>6.6.1、理解:布局、页面布局、公共布局、基础布局</p> <p>6.6.2、根目录创建layouts目录,/layouts/default.vue</p> <pre><code><template> <div> snow-default-layout </div> <slot /> </template> <script setup lang="ts"> </script> <style scoped> </style> </code></pre> <p>6.6.3、app.vue</p> <pre><code><template> <NuxtLayout> <NuxtPage/> </NuxtLayout> <!-- <div> <NuxtWelcome /> </div> --> </template> </code></pre> <p><a href="http://img.e-com-net.com/image/info8/5e0c738cc7ff4947a39b71d5521150b8.jpg" target="_blank"><img alt="nuxt3:我们开始吧-开发-配置-部署_第16张图片" height="350" src="http://img.e-com-net.com/image/info8/5e0c738cc7ff4947a39b71d5521150b8.jpg" width="650" style="border:1px solid black;"></a></p> <p> 6.6.4、</p> <p><a href="http://img.e-com-net.com/image/info8/d9d2760b5960465280edf516cadaa55c.jpg" target="_blank"><img alt="nuxt3:我们开始吧-开发-配置-部署_第17张图片" height="265" src="http://img.e-com-net.com/image/info8/d9d2760b5960465280edf516cadaa55c.jpg" width="648" style="border:1px solid black;"></a></p> <p> 6.6.5、某页面不想使用layout:</p> <pre><code>definePageMeta({ layout: false })</code></pre> <p>6.6.6、某页面使用指定layout</p> <p><a href="http://img.e-com-net.com/image/info8/bf4cc197e2dd45c696bdbe70ac94a509.jpg" target="_blank"><img alt="nuxt3:我们开始吧-开发-配置-部署_第18张图片" height="236" src="http://img.e-com-net.com/image/info8/bf4cc197e2dd45c696bdbe70ac94a509.jpg" width="539" style="border:1px solid black;"></a></p> <pre><code>definePageMeta({ layout: 'layout-snow' })</code></pre> <p>  6.6.7、动态设置layout</p> <pre><code>const router = useRoute() function enableLayout () { router.meta.layout = "layout-snow" }</code></pre> <p>6.6.8、全局设置,指定layout</p> <pre><code><template> <NuxtLayout :name="layoutSnow"> <NuxtPage/> </NuxtLayout> <!-- <div> <NuxtWelcome /> </div> --> </template> <script setup lang="ts"> const layoutSnow = ref("layout-snow") </script></code></pre> <p><strong>6.7、plugins</strong></p> <p>/plugins/index.ts</p> <pre><code>export default defineNuxtPlugin(()=>{ return { provide: { hello: (msg: string) => `hello ${msg}` } } })</code></pre> <p>/pages/plugin.vue</p> <pre><code><template> <div> snow-plugin </div> </template> <script setup lang="ts"> const { $hello } = useNuxtApp() console.log('9', $hello('world')) </script> <style scoped> </style> </code></pre> <p><a href="http://img.e-com-net.com/image/info8/8bb018b4e9734c25b43bdddd0bbd93ef.jpg" target="_blank"><img alt="nuxt3:我们开始吧-开发-配置-部署_第19张图片" height="343" src="http://img.e-com-net.com/image/info8/8bb018b4e9734c25b43bdddd0bbd93ef.jpg" width="650" style="border:1px solid black;"></a></p> <p><strong>6.8、middleware</strong></p> <p>/middleware/auth.ts</p> <pre><code>export default defineNuxtRouteMiddleware((to, from)=>{ console.log("auth") }) </code></pre> <p>/middleware/snow.ts</p> <pre><code>export default defineNuxtRouteMiddleware((to, from)=>{ console.log("snow") }) </code></pre> <p>/pages/plugin.vue</p> <pre><code><template> <div> snow-plugin </div> </template> <script setup lang="ts"> definePageMeta({ middleware: ["auth", "snow"] }) </script> <style scoped> </style> </code></pre> <p> 如图:</p> <p><a href="http://img.e-com-net.com/image/info8/ccc8d7249e7f4ef2ab88c84f87cb65d5.jpg" target="_blank"><img alt="nuxt3:我们开始吧-开发-配置-部署_第20张图片" height="389" src="http://img.e-com-net.com/image/info8/ccc8d7249e7f4ef2ab88c84f87cb65d5.jpg" width="650" style="border:1px solid black;"></a></p> <p><strong>6.9、server</strong></p> <p>6.9.1、目录</p> <p><a href="http://img.e-com-net.com/image/info8/f1239c77a7db4934a53b93ff4033ffb7.jpg" target="_blank"><img alt="nuxt3:我们开始吧-开发-配置-部署_第21张图片" height="283" src="http://img.e-com-net.com/image/info8/f1239c77a7db4934a53b93ff4033ffb7.jpg" width="371" style="border:1px solid black;"></a></p> <p>6.9.2、server/api/hello.ts</p> <pre><code>export default defineEventHandler((event) => { return { api: "works" } })</code></pre> <p> <a href="http://img.e-com-net.com/image/info8/40c19b19c51341128a55816d95db4519.jpg" target="_blank"><img alt="nuxt3:我们开始吧-开发-配置-部署_第22张图片" height="277" src="http://img.e-com-net.com/image/info8/40c19b19c51341128a55816d95db4519.jpg" width="485" style="border:1px solid black;"></a></p> <p> 6.9.3、server/api/test.get.ts</p> <pre><code>export default defineEventHandler((event) => { return `test get ts` })</code></pre> <p><a href="http://img.e-com-net.com/image/info8/b74e6fe077bd48c0bade5fc5220b196c.jpg" target="_blank"><img alt="nuxt3:我们开始吧-开发-配置-部署_第23张图片" height="197" src="http://img.e-com-net.com/image/info8/b74e6fe077bd48c0bade5fc5220b196c.jpg" width="440" style="border:1px solid black;"></a></p> <p>6.9.4、server/api/test.post.ts</p> <pre><code>export default defineEventHandler((event) => { return `test post ts` })</code></pre> <p>post请求需要使用postman工具: </p> <p><a href="http://img.e-com-net.com/image/info8/e366e15fe09e479aa9086f7b464819fd.jpg" target="_blank"><img alt="nuxt3:我们开始吧-开发-配置-部署_第24张图片" height="349" src="http://img.e-com-net.com/image/info8/e366e15fe09e479aa9086f7b464819fd.jpg" width="650" style="border:1px solid black;"></a></p> <p>6.9.5、 server/api/foo/[...].ts</p> <p>可以带有参数</p> <pre><code>export default defineEventHandler(() => `default api handle`)</code></pre> <p> <a href="http://img.e-com-net.com/image/info8/885db5cfa9794b2f9f2fea9a003bed1c.jpg" target="_blank"><img alt="nuxt3:我们开始吧-开发-配置-部署_第25张图片" height="213" src="http://img.e-com-net.com/image/info8/885db5cfa9794b2f9f2fea9a003bed1c.jpg" width="510" style="border:1px solid black;"></a></p> <p> 6.9.6、server/api/submit.post.ts</p> <pre><code>export default defineEventHandler (async (event) => { const body = await readBody(event); return { body } }) </code></pre> <p><a href="http://img.e-com-net.com/image/info8/6d0f261472f244f5941bc23112cd5348.jpg" target="_blank"><img alt="nuxt3:我们开始吧-开发-配置-部署_第26张图片" height="349" src="http://img.e-com-net.com/image/info8/6d0f261472f244f5941bc23112cd5348.jpg" width="650" style="border:1px solid black;"></a></p> <p></p> <p> 6.9.7、server/api/query.get.ts</p> <pre><code>export default defineEventHandler((event) => { const query = getQuery(event) return { a: query.param1, b: query.param2 } })</code></pre> <p><a href="http://img.e-com-net.com/image/info8/fddc967c895c4633a031914fc11d7df8.jpg" target="_blank"><img alt="nuxt3:我们开始吧-开发-配置-部署_第27张图片" height="594" src="http://img.e-com-net.com/image/info8/fddc967c895c4633a031914fc11d7df8.jpg" width="650" style="border:1px solid black;"></a></p> <p><strong>6.10、使用element-plus</strong></p> <p>6.10.1、安装</p> <blockquote> <p>pnpm install element-plus </p> </blockquote> <blockquote> <p>pnpm add  sass sass-loader -D</p> </blockquote> <blockquote> <p>pnpm add unplugin-auto-import unplugin-icons unplugin-vue-components -D</p> </blockquote> <p>6.10.2、package.json</p> <pre><code>{ "private":true, "scripts":{ "build":"nuxt build", "dev":"nuxt dev", "generate":"nuxt generate", "preview":"nuxt preview", "postinstall":"nuxt prepare" }, "devDependencies":{ "nuxt":"3.0.0", "sass":"1.57.1", "sass-loader":"13.2.8", "unplugin-auto-import":".12.1", "unplugin-icons":".14.15", "unplugin-vue-components":".22.12" }, "dependencies":{ "element-plus":"^2 .2.27" } }</code></pre> <p>6.10.3、assets/scss/index.scss</p> <pre><code>@use "element-plus/dist/index.css";</code></pre> <p>6.10.4、tsconfig.json</p> <pre><code>{ // https://nuxt.com/docs/guide/concepts/typescript "extends": "./.nuxt/tsconfig.json", "compilerOptions": { "types": ["element-plus/global"] } } </code></pre> <p>6.10.5、 nuxt.config.ts</p> <pre><code>import AutoImport from 'unplugin-auto-import/vite' import Components from "unplugin-vue-components/vite"; import { ElementPlusResolver } from 'unplugin-vue-components/resolvers' import IconsResolver from "unplugin-icons/resolver"; const lifecycle = process.env.npm_lifecycle_event; export default defineNuxtConfig({ vite: { plugins: [ AutoImport({ resolvers: [ ElementPlusResolver( ), IconsResolver()] }), Components({ dts: true, resolvers: [ElementPlusResolver( { importStyle: false } )] }), ], }, components: true, css: ["~/assets/scss/index.scss"], transpile: ["element-plus"], build: { transpile: lifecycle === "build" ? ["element-plus"] : [], }, })</code></pre> <p>6.10.6、plugins/element-plus.ts</p> <pre><code>import { ID_INJECTION_KEY } from 'element-plus'; export default defineNuxtPlugin(nuxtApp => { // Doing something with nuxtApp nuxtApp.vueApp.provide(ID_INJECTION_KEY,{ prefix: Math.floor(Math.random() * 10000), current: 0, }) })</code></pre> <p>6.10.7、pages/index.vue</p> <pre><code><el-button> ElButton </el-button></code></pre> <p>6.10.8、成功实现效果</p> <p><a href="http://img.e-com-net.com/image/info8/006116398b6543fdac44a3d56ee7c78e.jpg" target="_blank"><img alt="nuxt3:我们开始吧-开发-配置-部署_第28张图片" height="158" src="http://img.e-com-net.com/image/info8/006116398b6543fdac44a3d56ee7c78e.jpg" width="470" style="border:1px solid black;"></a></p> <p><strong>6.11、</strong>获取数据 | Nuxt 3 - 中文文档</p> <p>请求数据的方法有:useAsyncData、useLazyAsyncData (useAsyncData+lazy:true)、useFetch、useLazyFetch (useFetch+lazy:true)</p> <p><strong>pages/req.vue</strong></p> <pre><code><template> <div class="container"> <h1>snow</h1> </div> </template> <script setup lang="ts"> const token = useCookie("token"); const useFetchData = await useFetch('https://md.abc.com.cn/m-staff-center/api/v1/role/pageList',{ method: "get", headers: { 'Authorization' : `Bearer ${token.value}` } }) console.log('17useFetchData', useFetchData.data._rawValue) const useAsyncDataData = await useAsyncData('getRoleList', () => $fetch('https://md.abc.com.cn/m-staff-center/api/v1/role/pageList', { method: "get", headers: { 'Authorization' : `Bearer ${token.value}` } })) console.log('24useAsyncDataData', useAsyncDataData.data._rawValue) </script></code></pre> <p>数据获取成功:</p> <p><a href="http://img.e-com-net.com/image/info8/d36692af3b90490c9178ac65489c54cb.jpg" target="_blank"><img alt="nuxt3:我们开始吧-开发-配置-部署_第29张图片" height="320" src="http://img.e-com-net.com/image/info8/d36692af3b90490c9178ac65489c54cb.jpg" width="650" style="border:1px solid black;"></a></p> <p>注:1,这里使用的全路径接口地址请求的数据,没有因为是本地开发出现跨域问题,同时没有配置代理。2、多次尝试配置代理,使用方法包括vite、nitro,均没有成功,网上暂时也没有找到明确的解答。3、如果后续有了代理相关的进展会及时更新。4、既然本地使用全路径没有跨域问题,那么我考虑在封装请求时候使用全局环境变量来拼接不同环境的域名+接口地址。</p> <p><strong>6.12、封装请求</strong></p> <p>6.12.1、utils/request.ts</p> <pre><code>import { ElMessage } from 'element-plus' const fetch = (url: string, options?: any): Promise<any> => { const token = useCookie("token"); const headers = { // headers信息 'Authorization' : `Bearer ${token.value}` } const { public: { baseUrl } } = useRuntimeConfig() const reqUrl = baseUrl + url return new Promise((resolve, reject) => { useFetch(reqUrl, { ...options, headers }).then(({ data }: any) => { const value = data.value if (!data._rawValue) { // 这里处理错误回调 reject(value) }else if(data._rawValue.code !== '0'){ ElMessage({ message: data._rawValue.msg, type: 'error', }) } else { console.log('40data', data._rawValue) resolve(ref(data)) } }).catch((err: any) => { reject(err) }) }) } export default new class Http { get(url: string, params?: any): Promise<any> { return fetch(url, { method: 'get', params }) } post(url: string, params?: any): Promise<any> { return fetch(url, { method: 'post', params }) } put(url: string, body?: any): Promise<any> { return fetch(url, { method: 'put', body }) } delete(url: string, body?: any): Promise<any> { return fetch(url, { method: 'delete', body }) } }</code></pre> <p>6.12.2、baseUrl</p> <pre><code>// 参见本文6.13多环境开发 import { loadEnv } from 'vite' runtimeConfig: { // 运行时常量 public: { // 客户端-服务的都能访问 baseUrl: loadEnv(process.argv[process.argv.length-1], './env').VITE_SERVER_NAME } }, </code></pre> <p>6.12.3、utils/api.ts</p> <pre><code>import Http from '@/utils/request' export const config1 = (params: any) => { return Http.get('/m-staff-center/api/v1/pageList', params) } export const getVideoList = (params: any) => { return Http.post('/m-staff-center/api/v1/getName', params) }</code></pre> <p>6.12.4、使用</p> <pre><code>config1('').then((res: any) => { console.log('27', res) }).catch((err: any)=>{ console.log('29', err) }) getVideoList('').then((res: any) => { console.log('51', res) }).catch((err: any)=>{ console.log('54', err) })</code></pre> <p>经测试,成功。 </p> <p><strong>6.13、多环境开发</strong></p> <p>生产使用的项目通常会有dev、test、uat、pre、prd等环境,我们需要配置多种开发环境满足企业级开发要求。</p> <p>6.13.1、根目录创建env目录,创建环境变量文件</p> <p>文件命名规则 .env.[环境变量名,如dev]</p> <p><a href="http://img.e-com-net.com/image/info8/5fefb2cec1e648ec913983d69ea8be39.jpg" target="_blank"><img alt="nuxt3:我们开始吧-开发-配置-部署_第30张图片" height="218" src="http://img.e-com-net.com/image/info8/5fefb2cec1e648ec913983d69ea8be39.jpg" width="416" style="border:1px solid black;"></a></p> <p> .env.dev文件,其他文件同理</p> <pre><code># 请求接口地址 VITE_REQUEST_BASE_URL = '/m-staff-center/api/v1' VITE_SERVER_NAME = 'https://md.abc.com.cn/' # VITE开头的变量才会被暴露出去</code></pre> <p>6.13.2、package.json</p> <pre><code> "scripts": { "build": "nuxt build", "dev": "nuxt dev --mode dev", "test": "nuxt dev --mode test", "uat": "nuxt dev --mode uat", "pre": "nuxt dev --mode pre", "prd": "nuxt dev --mode prd", "generate": "nuxt generate", "preview": "nuxt preview", "postinstall": "nuxt prepare" },</code></pre> <p>6.13.3、nuxt.config.ts</p> <pre><code>import { loadEnv } from 'vite' console.log('基础服务路径', loadEnv(process.argv[process.argv.length-1], './env').VITE_SERVER_NAME)</code></pre> <p><a href="http://img.e-com-net.com/image/info8/fc46f3033b114d7d8a56fc5eb17420c0.jpg" target="_blank"><img alt="nuxt3:我们开始吧-开发-配置-部署_第31张图片" height="213" src="http://img.e-com-net.com/image/info8/fc46f3033b114d7d8a56fc5eb17420c0.jpg" width="650" style="border:1px solid black;"></a></p> <p>多环境配置成功,环境变量可以用于本地代理使用,如本地代理使用环境域名,等。 </p> <p><strong>6.14、服务器部署</strong></p> <table border="1" style="width:685px;"> <tbody> <tr> <td>npm run build</td> <td> <p>使用“混合渲染模式”创建一个.output目录。<br> 其中包含所有应用程序、服务器和依赖项,可用于生产。<br> 可通过node、pm2等启动后提供WEB服务。</p> <p>打包成混合渲染程序,常用。</p> </td> <td style="width:194px;">打包生成.output<br><a href="http://img.e-com-net.com/image/info8/e21d245b1c584819a701aef58e2b4196.jpg" target="_blank"><img alt="nuxt3:我们开始吧-开发-配置-部署_第32张图片" height="112" src="http://img.e-com-net.com/image/info8/e21d245b1c584819a701aef58e2b4196.jpg" width="325" style="border:1px solid black;"></a></td> </tr> <tr> <td>npm run generate</td> <td> <p>使用“SPA方式预渲染应用程序”的每个路由(启动server对整个程序代码中涉及的URL进行一次服务端和客户端渲染),将结果存储在纯 HTML 文件中,可以部署在任何静态托管服务上。<br> 该命令触发nuxi build带有prerender:true的参数。</p> <p>打包成SPA客户端渲染程序,常用。</p> </td> <td style="width:194px;">打包生成dist<br><a href="http://img.e-com-net.com/image/info8/ee2e6c9b6ae84017835df4bf08ebc8d7.jpg" target="_blank"><img alt="nuxt3:我们开始吧-开发-配置-部署_第33张图片" height="197" src="http://img.e-com-net.com/image/info8/ee2e6c9b6ae84017835df4bf08ebc8d7.jpg" width="326" style="border:1px solid black;"></a></td> </tr> </tbody> </table> <p><strong>build:</strong>混合渲染模式,node启动项目(或者使用pm2),nginx做代理转发。</p> <p>node</p> <blockquote> <p>node ./.output/server/index.mjs</p> </blockquote> <p>pm2</p> <blockquote> <p>pm2 start ecosystem.config.js</p> </blockquote> <pre><code>// 使用pm2,根目录创建ecosystem.config.js module.exports = { apps: [ { name: 'NuxtAppName', exec_mode: 'cluster', instances: 'max', script: './.output/server/index.mjs', } ] }</code></pre> <p> 未测试。</p> <pre><code>// nginx配置 { listen 80; server_name www.abc.com; // 域名 location / { proxy_pass http://127.0.0.1:3000; // 转发到当前服务器3000端口 } }</code></pre> <p>已测试,成功。</p> <p><strong>generate:</strong>预渲染模式,生成静态资源,nginx直接启服务。</p> <p>已测试,成功。</p> <p><strong>6.15、其他内容</strong></p> <p>待补充</p> <p><strong>七、过程记录</strong></p> <p>7.1、init项目不成功</p> <p><a href="http://img.e-com-net.com/image/info8/1a0de91efb244160b246344934531b2d.jpg" target="_blank"><img alt="nuxt3:我们开始吧-开发-配置-部署_第34张图片" height="196" src="http://img.e-com-net.com/image/info8/1a0de91efb244160b246344934531b2d.jpg" width="650" style="border:1px solid black;"></a>解1:墙内的同学可能创建不成功,这里推荐一个链接:https://github.com/nuxt/starter</p> <p>解2:开始使用科学上网的方法也没有下载成功,后来使用了付费科学上网的方法下载成功。下载成功后如图。</p> <p><a href="http://img.e-com-net.com/image/info8/58002c812c5c495a8eb8d5673458dca5.jpg" target="_blank"><img alt="nuxt3:我们开始吧-开发-配置-部署_第35张图片" height="110" src="http://img.e-com-net.com/image/info8/58002c812c5c495a8eb8d5673458dca5.jpg" width="650" style="border:1px solid black;"></a></p> <p>7.2、useHead接收参数如下:</p> <pre><code>useHead(meta: Computable<MetaObject>): void interface MetaObject extends Record<string, any> { charset?: string viewport?: string meta?: Array<Record<string, any>> link?: Array<Record<string, any>> style?: Array<Record<string, any>> script?: Array<Record<string, any>> noscript?: Array<Record<string, any>> titleTemplate?: string | ((title: string) => string) title?: string bodyAttrs?: Record<string, any> htmlAttrs?: Record<string, any> }</code></pre> <pre><code>charset: 指定 HTML 的字元编码,预设为 utf-8。 viewport: 设定网页的可见区域,预设为 width=device-width, initial-scale=1。 meta: 接受一个阵列,阵列中的每个元素,都將会建立一个 <meta> 标记,元素中物件的属性将对应至的属性。 link: 接受一个阵列,阵列中的每个元素,都将会建立一个 <link> 标记,元素中物件的属性将对应至的属性。 style: 接受一个阵列,阵列中的每個元素,都将会建立一个 <style> 标记,元素中物件的属性将对应至的属性。 script: 接受一个阵列,阵列中的每個元素,都将会建立一个 <script> 标记,元素中物件的属性将对应至的属性。 noscript: 接受一个阵列,阵列中的每個元素,都将会建立一个 <noscript> 标记,元素中物件的属性将对应至的属性。 titleTemplage: 接受一個字串或函數,用來动态的设定该页面元件的网页标题。 title: 在页面元件设置静态的网页标题。 bodyAttrs: 接受一个物件,设置网页中标识的属性,物件中的属性将对应至的属性。 htmlAttrs: 接受一个物件,设置网页中标识的属性,物件中的属性将对应至的属性。</code></pre> <p>理解useHead:相当于设置页面<head>标签内相关内容。</p> <p>7.3、出现类似包不能解析的问题</p> <p><a href="http://img.e-com-net.com/image/info8/ea6fdc78075b45359565951f3c4d2f12.jpg" target="_blank"><img alt="nuxt3:我们开始吧-开发-配置-部署_第36张图片" height="250" src="http://img.e-com-net.com/image/info8/ea6fdc78075b45359565951f3c4d2f12.jpg" width="650" style="border:1px solid black;"></a></p> <p>解决:</p> <p>根目录创建 .npmrc 文件</p> <pre><code>shamefully-hoist = true</code></pre> <p>删除node_modules,再次执行pnpm install ,解决成功 </p> <p>有些包仅在根目录的node_modules时才有效,可以通过此配置,提升那些不在node_modules根目录的包。</p> <p>或者执行:</p> <pre><code>pnpm i --shamefully-hoist</code></pre> <p>两种方法均测试成功。</p> <p><strong>7.4、publicPath (nuxt2.X)  等同于  baseURL (nuxt3.0)</strong></p> <p>Nuxt Configuration Reference · Nuxt</p> <p>7.4.1、nuxt2.x,nuxt.config.js</p> <pre><code>build: { publicPath: process.env.PUBLIC_PATH, }</code></pre> <p>7.4.2、nuxt3,nuxt.config.ts</p> <pre><code>app: { baseURL: '/m-abc-pc', }</code></pre> <p><a href="http://img.e-com-net.com/image/info8/51ef513d25e14d9e8947bc0adef52fc4.jpg" target="_blank"><img alt="nuxt3:我们开始吧-开发-配置-部署_第37张图片" height="490" src="http://img.e-com-net.com/image/info8/51ef513d25e14d9e8947bc0adef52fc4.jpg" width="650" style="border:1px solid black;"></a></p> <p>7.4.3、使用场景</p> <p>使用这一项配置的时候请求资源的地址就会有这个目录,如下图,在服务区部署时候很重要。</p> <p><a href="http://img.e-com-net.com/image/info8/52f476917f9a4290b92a686e2c1615bc.jpg" target="_blank"><img alt="nuxt3:我们开始吧-开发-配置-部署_第38张图片" height="106" src="http://img.e-com-net.com/image/info8/52f476917f9a4290b92a686e2c1615bc.jpg" width="636" style="border:1px solid black;"></a></p> <p>7.5、开发环境修改端口</p> <p><a href="http://img.e-com-net.com/image/info8/39b235010b74493094eb436d41f1b6f4.jpg" target="_blank"><img alt="nuxt3:我们开始吧-开发-配置-部署_第39张图片" height="248" src="http://img.e-com-net.com/image/info8/39b235010b74493094eb436d41f1b6f4.jpg" width="650" style="border:1px solid black;"></a></p> <p><a href="http://img.e-com-net.com/image/info8/765da92a68f5448597f8dd16d5a8fe6f.jpg" target="_blank"><img alt="nuxt3:我们开始吧-开发-配置-部署_第40张图片" height="148" src="http://img.e-com-net.com/image/info8/765da92a68f5448597f8dd16d5a8fe6f.jpg" width="524" style="border:1px solid black;"></a></p> <p><strong>7.6、设置网站 favicon</strong></p> <p>7.6.1、favicon.ico 文件放在public目录下。</p> <p><a href="http://img.e-com-net.com/image/info8/e9ddf863c4a14053a3d5998e7f68b258.jpg" target="_blank"><img alt="" height="95" src="http://img.e-com-net.com/image/info8/e9ddf863c4a14053a3d5998e7f68b258.jpg" width="389"></a></p> <p>7.6.2、nuxt.config.ts  app/head/link下增加相应内容</p> <pre><code>link: [ { rel: "icon", href: "/favicon.ico", type: 'image/x-icon'}, ],</code></pre> <p><a href="http://img.e-com-net.com/image/info8/66b4484bd602409881edcab0df40a645.jpg" target="_blank"><img alt="nuxt3:我们开始吧-开发-配置-部署_第41张图片" height="257" src="http://img.e-com-net.com/image/info8/66b4484bd602409881edcab0df40a645.jpg" width="650" style="border:1px solid black;"></a></p> <p>经过测试,成功。</p> <p><strong>八、欢迎交流指正,关注我,一起学习。</strong></p> <p><strong>参考链接:</strong></p> <p>Configuration | ⚗️ Nitro</p> <p>[Day 24] Nuxt 3 搜尋引擎最佳化 (SEO) 與 HTML Meta Tag - iT 邦幫忙::一起幫忙解決難題,拯救 IT 人的一天</p> <p>Nuxt3-动态更改meta信息(关键词、标题、描述)_fat_shady的博客-CSDN博客</p> <p>令人愉快的 Nuxt3 教程 (一): 应用的创建与配置 - 知乎</p> <p>技术胖-Nuxt3从零到实战手把手 免费视频图文教程</p> <p>Nuxt.js 3.0 正式发布! - 知乎</p> <p></p> </div> </div> </div> </div> </div> <!--PC和WAP自适应版--> <div id="SOHUCS" sid="1645415616967925760"></div> <script type="text/javascript" src="/views/front/js/chanyan.js"></script> <!-- 文章页-底部 动态广告位 --> <div class="youdao-fixed-ad" id="detail_ad_bottom"></div> </div> <div class="col-md-3"> <div class="row" id="ad"> <!-- 文章页-右侧1 动态广告位 --> <div id="right-1" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_1"> </div> </div> <!-- 文章页-右侧2 动态广告位 --> <div id="right-2" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_2"></div> </div> <!-- 文章页-右侧3 动态广告位 --> <div id="right-3" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_3"></div> </div> </div> </div> </div> </div> </div> <div class="container"> <h4 class="pt20 mb15 mt0 border-top">你可能感兴趣的:(前端,nuxt,前端,nuxt)</h4> <div id="paradigm-article-related"> <div class="recommend-post mb30"> <ul class="widget-links"> <li><a href="/article/1885408809002790912.htm" title="基于HarmonyOS 5.0 Next的应用开发设计模式与前端框架的架构整合与实践【附代码实例】" target="_blank">基于HarmonyOS 5.0 Next的应用开发设计模式与前端框架的架构整合与实践【附代码实例】</a> <span class="text-muted">一键难忘</span> <a class="tag" taget="_blank" href="/search/%E7%B2%BE%E9%80%9AAI%E5%AE%9E%E6%88%98%E5%8D%83%E4%BE%8B%E4%B8%93%E6%A0%8F%E5%90%88%E9%9B%86/1.htm">精通AI实战千例专栏合集</a><a class="tag" taget="_blank" href="/search/harmonyos/1.htm">harmonyos</a><a class="tag" taget="_blank" href="/search/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/1.htm">设计模式</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF%E6%A1%86%E6%9E%B6/1.htm">前端框架</a> <div>文章目录HarmonyOS5.0Next应用开发:架构设计中的设计模式与前端框架设计HarmonyOS5.0Next概览设计模式在HarmonyOS应用开发中的应用单例模式工厂模式观察者模式设计模式的使用分层架构设计1.公共能力层(CommonLayer)2.基础特性层(FeatureLayer)3.产品定制层(ProductLayer)模块化设计1.模块化结构2.模块化代码示例前端框架的设计Ar</div> </li> <li><a href="/article/1885390277267484672.htm" title="《亿级流量下的架构实战:HTTP全链路解析与智能监控系统搭建》" target="_blank">《亿级流量下的架构实战:HTTP全链路解析与智能监控系统搭建》</a> <span class="text-muted">我的青春不太冷</span> <a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84/1.htm">架构</a><a class="tag" taget="_blank" href="/search/http/1.htm">http</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C%E5%8D%8F%E8%AE%AE/1.htm">网络协议</a><a class="tag" taget="_blank" href="/search/%E7%A7%91%E6%8A%80/1.htm">科技</a><a class="tag" taget="_blank" href="/search/%E7%BB%8F%E9%AA%8C%E5%88%86%E4%BA%AB/1.htm">经验分享</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C/1.htm">网络</a> <div>文章目录全链路解析:HTTP请求响应与数据可视化监控一、HTTP请求响应全流程解析1.全链路交互流程图2.关键技术实现2.1前端请求构造(ES6+语法示例)2.2服务端处理架构(Node.js/Express)二、数据可视化监控方案1.数据存储架构设计2.数据库操作层实现3.管理界面实现方案3.1可视化看板路由//routes/admin.js3.2数据可视化模板(EJS示例)4.最佳实践建议4.</div> </li> <li><a href="/article/1885374510740336640.htm" title="Vue - route路由(router-link、useRoute、useRouter)" target="_blank">Vue - route路由(router-link、useRoute、useRouter)</a> <span class="text-muted">来一碗刘肉面</span> <a class="tag" taget="_blank" href="/search/Vue/1.htm">Vue</a><a class="tag" taget="_blank" href="/search/vue.js/1.htm">vue.js</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a> <div>为了避免反复在app.vue中去修改引入的路径,当用了新的页面,想切换回老页面的时候,都需要去手动改变路径,那么有没有一种可能,可以在一个地方,把这些组件配置好,然后通过不同的路径,就去访问不同的组件呢?vuerouter就提供了这个功能,翻译一下,router:路由,vuerouter,vue的路由。单页面应用:SPASPA的核心思想是将应用划分为多个组件,通过前端路由来控制不同组件的显示,实现</div> </li> <li><a href="/article/1885363289643347968.htm" title="优化冗余代码:提升前端项目开发效率的实用方法" target="_blank">优化冗余代码:提升前端项目开发效率的实用方法</a> <span class="text-muted">三掌柜666</span> <a class="tag" taget="_blank" href="/search/web%E5%89%8D%E7%AB%AF%E7%9F%A5%E8%AF%86%E6%B1%87%E6%80%BB/1.htm">web前端知识汇总</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a> <div>目录前言代码复用与组件化模块化开发与代码分割工具辅助与自动化结束语前言在前端开发中,我们常常会遇到代码冗余的问题,这不仅增加了代码量,还影响了项目的可维护性和开发效率。还有就是有时候会接到紧急业务需求,要求立马完成上线,这时候多人协作开发,代码质量不会很高,很多都是复制粘贴;亦或是接手的代码比较老旧,公共组件里面写了大量冗余代码,这种情况下时间越久,开发起来就越难受。那么本文将结合实际项目案例,分</div> </li> <li><a href="/article/1885356857632026624.htm" title="前端学习-事件解绑,mouseover和mouseenter的区别(二十九)" target="_blank">前端学习-事件解绑,mouseover和mouseenter的区别(二十九)</a> <span class="text-muted">marshalVS</span> <a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a> <div>目录前言解绑事件语法鼠标经过事件的区别鼠标经过事件示例代码两种注册事件的区别总结前言人道洛阳花似锦,偏我来时不逢春解绑事件on事件方式,直接使用null覆盖就可以实现事件的解绑语法btn.onclick=function(){alert('点击了')}btn.onclick=null;constben=document.querySelector('button');ben.addEventLis</div> </li> <li><a href="/article/1885354459828121600.htm" title="毕设开源 python大数据旅游数据分析可视化系统(源码分享)" target="_blank">毕设开源 python大数据旅游数据分析可视化系统(源码分享)</a> <span class="text-muted">bee_dc</span> <a class="tag" taget="_blank" href="/search/%E6%AF%95%E4%B8%9A%E8%AE%BE%E8%AE%A1/1.htm">毕业设计</a><a class="tag" taget="_blank" href="/search/%E6%AF%95%E8%AE%BE/1.htm">毕设</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%95%B0%E6%8D%AE/1.htm">大数据</a> <div>文章目录0前言1课题背景2数据处理3数据可视化工具3.1django框架介绍3.2ECharts4Django使用echarts进行可视化展示(mysql数据库)4.1修改setting.py连接mysql数据库4.2导入数据4.3使用echarts可视化展示5实现效果5.1前端展示5.2后端展示6最后0前言这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到</div> </li> <li><a href="/article/1885325708717256704.htm" title="java 字符串日期字段格式化前端显示" target="_blank">java 字符串日期字段格式化前端显示</a> <span class="text-muted">qq_36608622</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>在Java应用程序中,如果你有一个字符串类型的日期字段,并希望将其格式化后显示在前端,可以通过多种方式实现。这通常涉及到在后端将字符串转换为Date或LocalDateTime等对象,然后使用适当的注解或配置来确保它们以正确的格式序列化为JSON发送到前端。以下是几种常见方法:方法一:使用@JsonFormat注解(Jackson)如果你使用的是Jackson来处理JSON序列化和反序列化,可以在</div> </li> <li><a href="/article/1885323687482159104.htm" title="前端知识速记—JS篇:箭头函数" target="_blank">前端知识速记—JS篇:箭头函数</a> <span class="text-muted">无限大.</span> <a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF%E7%9F%A5%E8%AF%86%E9%80%9F%E8%AE%B0/1.htm">前端知识速记</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>前端知识速记—JS篇:箭头函数什么是箭头函数?箭头函数是ES6引入的一种新的函数书写方式,其语法更为简洁,常用于替代传统的函数表达式。箭头函数的基本语法如下:constfunctionName=(parameters)=>{//函数体};通过这种方式,开发者可以以更简练的形式定义函数,提高代码的可读性。箭头函数的基本特性1.简化语法箭头函数最直接的优势就是语法简单,特别是在定义短小的函数时,能显著</div> </li> <li><a href="/article/1885305774884843520.htm" title="ambari-server页面错位问题解决" target="_blank">ambari-server页面错位问题解决</a> <span class="text-muted">王木头</span> <a class="tag" taget="_blank" href="/search/ambari/1.htm">ambari</a><a class="tag" taget="_blank" href="/search/hadoop/1.htm">hadoop</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E6%95%B0%E6%8D%AE/1.htm">大数据</a> <div>背景:项目新安装的ambari集群页面错位如下解决办法(临时):修改ambari-server的前端文件:/usr/lib/ambari-server/web/javascripts/app.js原代码:initNavigationBar:function(){if(App.get('router.mainController.isClusterDataLoaded')){$('body').on</div> </li> <li><a href="/article/1885302496662974464.htm" title="如何优化代码性能?" target="_blank">如何优化代码性能?</a> <span class="text-muted">杨胜增</span> <a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96/1.htm">性能优化</a> <div>优化代码性能是编程中的一个重要课题,无论是在处理大量数据的后台服务,还是在资源受限的前端应用中,都需要高效的代码。优化代码性能不仅仅是让代码跑得更快,还要保持代码的可读性、可维护性和可扩展性。下面我将从多个角度来探讨如何优化代码性能:1.算法优化算法是影响性能的核心。如果用最简单的方式解决问题,可能会导致性能瓶颈。因此,首先需要选择合适的算法。时间复杂度:使用更高效的算法来替代低效的算法。例如,排</div> </li> <li><a href="/article/1885301990288846848.htm" title="前端的核心技术" target="_blank">前端的核心技术</a> <span class="text-muted">善良的小乔</span> <a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a> <div>前端开发的核心技术主要围绕HTML、CSS、JavaScript三大基础语言展开,同时结合现代前端开发的需求,还包括前端框架、构建工具、前端安全和性能优化等内容。下面,我们详细解析前端开发中的核心技术。一.HTML(超文本标记语言)详解HTML(HyperTextMarkupLanguage)是前端开发的基础,用于构建网页的结构。HTML由各种标签(Tag)组成,每个标签都有不同的作用,主要用于定</div> </li> <li><a href="/article/1885277514507546624.htm" title="深入了解 React:从入门到高级应用" target="_blank">深入了解 React:从入门到高级应用</a> <span class="text-muted">╰つ゛木槿</span> <a class="tag" taget="_blank" href="/search/web%E5%89%8D%E7%AB%AF/1.htm">web前端</a><a class="tag" taget="_blank" href="/search/react.js/1.htm">react.js</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF%E6%A1%86%E6%9E%B6/1.htm">前端框架</a> <div>深入了解React:从入门到高级应用React是由Facebook开发并维护的一个开源JavaScript库,用于构建用户界面。自2013年发布以来,React在前端开发领域迅速崛起,成为最受欢迎的UI构建工具之一。无论是小型的单页应用(SPA)还是复杂的大型企业级应用,React都能提供高效、灵活的解决方案。本文将全面、详细地介绍React,包括其核心概念、工作原理、最佳实践以及生态系统。目录:</div> </li> <li><a href="/article/1885264147717877760.htm" title="构建企业级React应用的进阶实践" target="_blank">构建企业级React应用的进阶实践</a> <span class="text-muted">python算法(魔法师版)</span> <a class="tag" taget="_blank" href="/search/react.js/1.htm">react.js</a> <div>构建企业级React应用的进阶实践在当今前端开发领域,React凭借其组件化架构和声明式编程范式,已成为构建复杂用户界面的首选方案。本文将深入探讨React的高级应用场景,通过一系列精心设计的代码示例,展示如何打造高性能、可维护的现代化前端应用。一、状态管理的艺术1.1原子化状态管理typescript复制//lib/recoil/atoms.tsimport{atom,selector}from</div> </li> <li><a href="/article/1885250658383228928.htm" title="【前端面试】深入了解Node.js基础" target="_blank">【前端面试】深入了解Node.js基础</a> <span class="text-muted">贾明恣</span> <a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95/1.htm">面试</a><a class="tag" taget="_blank" href="/search/node.js/1.htm">node.js</a> <div>前端与node.jsNode.js不是一门语言也不是框架,而是JavaScript运行时环境。基于GoogleV8引擎、同时它通过封装和抽象操作系统提供的底层功能,以及使用Libuv等c++/c的核心模块,扩展了JavaScript功能,使得JavaScript能够同时具有DOM操作(浏览器)和I/O、文件读写、操作数据库(服务器端)……能力,是目前最简单的全栈式语言。前端开发者经常需要安装Nod</div> </li> <li><a href="/article/1885246615669764096.htm" title="数据库查询优化:提升性能的关键实践" target="_blank">数据库查询优化:提升性能的关键实践</a> <span class="text-muted"></span> <div>title:数据库查询优化:提升性能的关键实践date:2025/1/30updated:2025/1/30author:cmdragonexcerpt:在当今数据驱动的商业环境中,数据库的性能直接影响着应用程序的响应速度和用户体验。查询优化是性能调优的重要组成部分,通过对SQL查询的分析与改进,减少查询执行时间和资源消耗,从而提升整体系统效率。categories:前端开发tags:查询优化数据</div> </li> <li><a href="/article/1885245864495083520.htm" title="每个 Java 工程师都必须知道的五个 API 性能优化技巧" target="_blank">每个 Java 工程师都必须知道的五个 API 性能优化技巧</a> <span class="text-muted">等风来.长</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96/1.htm">性能优化</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/%E7%A8%8B%E5%BA%8F%E4%BA%BA%E7%94%9F/1.htm">程序人生</a><a class="tag" taget="_blank" href="/search/%E8%81%8C%E5%9C%BA%E5%92%8C%E5%8F%91%E5%B1%95/1.htm">职场和发展</a> <div>为什么你的API响应这么慢?也许你需要解决这些问题。作为后端开发人员,我们总是在编写各种API,无论是为前端Web提供数据支持的HTTPRESTAPI,还是提供内部使用的RPCAPI。这些API在服务初期可能表现不错,但随着用户数量的增长,一开始响应很快的API变得越来越慢,直到用户抱怨:“你的系统太糟糕了。我只是浏览一个网页。怎么这么慢?”这时,您需要考虑如何优化您的API性能。要提高你的API</div> </li> <li><a href="/article/1885229978392522752.htm" title="前端主流的项目开发过程详解" target="_blank">前端主流的项目开发过程详解</a> <span class="text-muted">GISer_Jinger</span> <a class="tag" taget="_blank" href="/search/Javascript/1.htm">Javascript</a><a class="tag" taget="_blank" href="/search/%E9%A1%B9%E7%9B%AE/1.htm">项目</a><a class="tag" taget="_blank" href="/search/Vue/1.htm">Vue</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a> <div>前端主流的项目开发涉及多个方面,包括使用的技术栈、框架、工具以及开发流程等。以下是对前端主流项目开发的详细分析:一、技术栈前端主流项目开发的技术栈通常包括HTML、CSS、JavaScript以及相关的库和框架。其中,JavaScript是核心,它使得网页更加动态和交互。而HTML和CSS则分别负责网页的结构和样式。HTML:用于构建网页的基本结构,如标题、段落、链接、图像等。CSS:用于控制网页</div> </li> <li><a href="/article/1885217492838707200.htm" title="web前端三大主流框架" target="_blank">web前端三大主流框架</a> <span class="text-muted">109702008</span> <a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a><a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A8%8B/1.htm">编程</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF%E6%A1%86%E6%9E%B6/1.htm">前端框架</a><a class="tag" taget="_blank" href="/search/%E4%BA%BA%E5%B7%A5%E6%99%BA%E8%83%BD/1.htm">人工智能</a> <div>Claude3OpusWeb前端开发中,目前有三个主流的框架:1.React:React是由Facebook开发的一款JavaScript库,用于构建用户界面。它采用组件化的开发模式,将界面拆分成多个独立且可复用的组件,使开发和维护更加高效。React的核心思想是虚拟DOM(VirtualDOM)和单向数据流,通过高效的DOMdiff算法进行页面更新,提供出色的性能和用户体验。2.Angular:</div> </li> <li><a href="/article/1885216986179366912.htm" title="【前端】Electron入门开发教程,从介绍Electron到基础引用以及部分深度使用,附带常见的十个报错问题的解决方案和代码优化。" target="_blank">【前端】Electron入门开发教程,从介绍Electron到基础引用以及部分深度使用,附带常见的十个报错问题的解决方案和代码优化。</a> <span class="text-muted">爱上大树的小猪</span> <a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/electron/1.htm">electron</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a> <div>Electron是一个使用JavaScript、HTML和CSS等Web技术创建跨平台桌面应用程序的框架。它结合了Chromium渲染引擎和Node.js运行时,允许开发者构建高质量的桌面应用。下面是一个简要的Electron开发教程,从基础到深入,并包括一些常见的报错问题及其解决方案。一、介绍ElectronElectron能够使用前端技术栈开发桌面应用,支持Windows、macOS和Linu</div> </li> <li><a href="/article/1885209797012287488.htm" title="低代码产品表单渲染架构" target="_blank">低代码产品表单渲染架构</a> <span class="text-muted">露临霜</span> <a class="tag" taget="_blank" href="/search/%E4%BD%8E%E4%BB%A3%E7%A0%81/1.htm">低代码</a><a class="tag" taget="_blank" href="/search/%E4%BD%8E%E4%BB%A3%E7%A0%81/1.htm">低代码</a> <div>在React和Vue没有流行起来的时候,低代码产品的表单渲染设计通常会使用操作Dom的方式实现。下面是一个表单的例子:产品层用户通过打开表单,使用不同业务场景业务下的表单页面,中间的Render层就是技术实现。每一个不同业务的表单页面就是低代码产品中的一个元素。技术层渲染层的核心在于View和Controller,现代基于框架实现一般是MVVM的实现。上面是基于传统的前端框架实现(Jquery),</div> </li> <li><a href="/article/1885198181873020928.htm" title="python3.7.4怎么安装pycryptodome_python3.6 安装第三方库 pyCryptodome 实现AES加密" target="_blank">python3.7.4怎么安装pycryptodome_python3.6 安装第三方库 pyCryptodome 实现AES加密</a> <span class="text-muted">weixin_39799646</span> <div>起因前端日子写完的Python入库脚本,通过直接读取配置文件的内容(包含了数据库的ip,数据库的用户名,数据库的密码),因为配置文件中的数据库密码是明文显示的,所以不太安全,由此对其进行加密。编码之路编程环境Python3.6第三方库–pyCryptodome第三方库的介绍及下载1.在之前的AES加密中,python2或者3.4采用的是pyCyrpto这个模块,但是昨天废了好大劲去安装它都是失败,</div> </li> <li><a href="/article/1885197677902229504.htm" title="Nginx 负载均衡算法:让你轻松应对流量高峰!" target="_blank">Nginx 负载均衡算法:让你轻松应对流量高峰!</a> <span class="text-muted">❀͜͡傀儡师</span> <a class="tag" taget="_blank" href="/search/nginx/1.htm">nginx</a><a class="tag" taget="_blank" href="/search/%E8%B4%9F%E8%BD%BD%E5%9D%87%E8%A1%A1/1.htm">负载均衡</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a> <div>轮询(RoundRobin)描述轮询是Nginx默认的负载均衡算法。它将前端请求按顺序分配到后端服务器,确保每个服务器都能接收到请求。公平性:每个服务器都有相同的机会接收请求。无状态:不考虑服务器的当前负载情况。upstreambackend{serverbackend1.example.com;serverbackend2.example.com;serverbackend3.example.c</div> </li> <li><a href="/article/1885158585374142464.htm" title="Rollup:专注类库和框架打包" target="_blank">Rollup:专注类库和框架打包</a> <span class="text-muted">时解之</span> <a class="tag" taget="_blank" href="/search/JS%E4%B8%93%E5%8C%BA/1.htm">JS专区</a><a class="tag" taget="_blank" href="/search/Rollup/1.htm">Rollup</a><a class="tag" taget="_blank" href="/search/Rollup%E6%89%93%E5%8C%85/1.htm">Rollup打包</a><a class="tag" taget="_blank" href="/search/%E5%A4%A7%E5%89%8D%E7%AB%AF/1.htm">大前端</a><a class="tag" taget="_blank" href="/search/Javascript/1.htm">Javascript</a> <div>文章内容输出来源:拉勾大前端高薪训练营-概述-也是一款ESModules打包器-也可以将项目中的一些散落的细小模块打包为整块代码-rollup与webpack作用类似-rollup更为小巧,仅仅是一款ESM打包器-rollup中并不支持类似HMR这种高级特性-rollup并不是要与webpack全面竞争-目标是提供一个充分利用ESM各项特性的高效打包器-快速上手-准备代码-src/message.</div> </li> <li><a href="/article/1885156055181225984.htm" title="前端必知必会-TypeScript 实用类型" target="_blank">前端必知必会-TypeScript 实用类型</a> <span class="text-muted">编程岁月</span> <a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/typescript/1.htm">typescript</a><a class="tag" taget="_blank" href="/search/ubuntu/1.htm">ubuntu</a> <div>文章目录TypeScript实用类型PartialrequiredRecord省略OmitPickExcludeReturnType参数ParametersReadonly总结TypeScript实用类型TypeScript附带大量类型,可帮助进行一些常见的类型操作,通常称为实用类型。PartialPartial将对象中的所有属性更改为可选。示例interfacePoint{x:number;y:</div> </li> <li><a href="/article/1885156055592267776.htm" title="前端必知必会-TypeScript Keyof的使用" target="_blank">前端必知必会-TypeScript Keyof的使用</a> <span class="text-muted">编程岁月</span> <a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/typescript/1.htm">typescript</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a> <div>文章目录TypeScriptKeyof带有显式键的keyof带有索引签名的keyof总结TypeScriptKeyofkeyof是TypeScript中的一个关键字,用于从对象类型中提取键类型。带有显式键的keyof当在带有显式键的对象类型上使用时,keyof会使用这些键创建一个联合类型。示例interfacePerson{name:string;age:number;}//此处的`keyofPe</div> </li> <li><a href="/article/1885155046430142464.htm" title="前端学习-环境this对象以及回调函数(二十七)" target="_blank">前端学习-环境this对象以及回调函数(二十七)</a> <span class="text-muted">marshalVS</span> <a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a> <div>目录前言目标环境对象作用环境对象this是什么?判断this指向的粗略规则是什么?回调函数目标常见的使用场景综合案例:Tab任务栏切换总结前言男儿何不带吴钩,收取关山五十州目标能够分析判断函数运行在不同环境中this所指代的对象环境对象指的是函数内部特殊的变量this,它代表当前函数运行时所处的环境作用弄清楚this的指向,可以使代码更简洁函数的调用方式不同,this所指代的对象不同[谁调用,th</div> </li> <li><a href="/article/1885129679107584000.htm" title="Word/excel/df文档转图片返回前端" target="_blank">Word/excel/df文档转图片返回前端</a> <span class="text-muted">p393975269</span> <a class="tag" taget="_blank" href="/search/%E5%9B%BE%E7%89%87%E8%BD%AC%E6%8D%A2%E5%B7%A5%E5%85%B7aspose/1.htm">图片转换工具aspose</a><a class="tag" taget="_blank" href="/search/%E6%96%87%E6%A1%A3%E8%BD%AC%E5%9B%BE%E7%89%87%E5%87%BA%E7%8E%B0%E7%A9%BA%E5%BF%83%E6%96%B9%E6%A0%BC%E4%B9%B1%E7%A0%81/1.htm">文档转图片出现空心方格乱码</a><a class="tag" taget="_blank" href="/search/%E6%96%87%E6%A1%A3%E8%BD%AC%E5%9B%BE%E7%89%87%E8%87%AA%E5%AE%9A%E4%B9%89%E5%AD%97%E4%BD%93/1.htm">文档转图片自定义字体</a> <div>导入jarcom.asposeaspose-words13.9.0.0com.asposeaspose-cells8.5.2commons-iocommons-io2.6org.apache.pdfboxpdfbox2.0.8org.apache.pdfboxfontbox2.0.8controller层从本地读取文件信息publicclassWordToPngController{publics</div> </li> <li><a href="/article/1885106722830348288.htm" title="Vue对话式前端界面" target="_blank">Vue对话式前端界面</a> <span class="text-muted">WUJI02</span> <a class="tag" taget="_blank" href="/search/%E8%A3%81%E5%88%A4%E6%96%87%E4%B9%A6%E5%A4%A7%E6%A8%A1%E5%9E%8B/1.htm">裁判文书大模型</a><a class="tag" taget="_blank" href="/search/vue.js/1.htm">vue.js</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/javascript/1.htm">javascript</a> <div>一.对话样式的实现用一个messages数组来存放对话信息,信息有两种类型user和botthis.messages.push({type:'user',content:this.userMessage});this.messages.push({type:'bot',content:response.data.reply});模版部分使用:class="['message-content',me</div> </li> <li><a href="/article/1885100416622981120.htm" title="springboot + xterm.js + vue + websocket实现终端功能(y-shell)文件管理器实现" target="_blank">springboot + xterm.js + vue + websocket实现终端功能(y-shell)文件管理器实现</a> <span class="text-muted">张音乐</span> <a class="tag" taget="_blank" href="/search/JS/1.htm">JS</a><a class="tag" taget="_blank" href="/search/Vue/1.htm">Vue</a><a class="tag" taget="_blank" href="/search/React/1.htm">React</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF%E8%B8%A9%E5%9D%91%E5%AE%9E%E6%88%98%E6%95%99%E7%A8%8B/1.htm">前端踩坑实战教程</a><a class="tag" taget="_blank" href="/search/%E6%A0%91%E5%BD%A2%E8%8F%9C%E5%8D%95/1.htm">树形菜单</a><a class="tag" taget="_blank" href="/search/%E5%8F%B3%E9%94%AE%E8%8F%9C%E5%8D%95/1.htm">右键菜单</a><a class="tag" taget="_blank" href="/search/VUE/1.htm">VUE</a> <div>一、文件管理器功能描述这一章节讲一下文件管理器的实现与设计细节。首先,文件管理器需要提供以下几个主要的功能,开发过程中使用vue渲染前端页面以及交互过程中还是遇到了不少问题,比如说右键菜单,表单校验。1、文件夹的新增,编辑,删除。2、ssh配置的新增,编辑,删除。3、右键菜单如图:文件夹管理ssh连接管理快速运行dockerrun-itd--namey-shell-</div> </li> <li><a href="/article/1885081257105223680.htm" title="探索2025年最流行的移动端前端框架" target="_blank">探索2025年最流行的移动端前端框架</a> <span class="text-muted">程序猿000001号</span> <a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF%E6%A1%86%E6%9E%B6/1.htm">前端框架</a> <div>探索2025年最流行的移动端前端框架正文:在当今快速发展的移动互联网时代,选择合适的前端框架对于开发高效、响应迅速的移动应用至关重要。以下是一些目前非常流行且备受开发者青睐的移动端前端UI框架。VantVant是一个轻量、可靠的移动端Vue组件库,适用于各种业务场景。它提供了丰富的组件和良好的文档支持,是许多电商应用的首选。ElementPlusElementPlus是基于Vue3的桌面端组件库,</div> </li> <li><a href="/article/71.htm" title="Linux的Initrd机制" target="_blank">Linux的Initrd机制</a> <span class="text-muted">被触发</span> <a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a> <div>Linux 的 initrd 技术是一个非常普遍使用的机制,linux2.6 内核的 initrd 的文件格式由原来的文件系统镜像文件转变成了 cpio 格式,变化不仅反映在文件格式上, linux 内核对这两种格式的 initrd 的处理有着截然的不同。本文首先介绍了什么是 initrd 技术,然后分别介绍了 Linux2.4 内核和 2.6 内核的 initrd 的处理流程。最后通过对 Lin</div> </li> <li><a href="/article/198.htm" title="maven本地仓库路径修改" target="_blank">maven本地仓库路径修改</a> <span class="text-muted">bitcarter</span> <a class="tag" taget="_blank" href="/search/maven/1.htm">maven</a> <div>默认maven本地仓库路径:C:\Users\Administrator\.m2 修改maven本地仓库路径方法:     1.打开E:\maven\apache-maven-2.2.1\conf\settings.xml     2.找到        </div> </li> <li><a href="/article/325.htm" title="XSD和XML中的命名空间" target="_blank">XSD和XML中的命名空间</a> <span class="text-muted">darrenzhu</span> <a class="tag" taget="_blank" href="/search/xml/1.htm">xml</a><a class="tag" taget="_blank" href="/search/xsd/1.htm">xsd</a><a class="tag" taget="_blank" href="/search/schema/1.htm">schema</a><a class="tag" taget="_blank" href="/search/namespace/1.htm">namespace</a><a class="tag" taget="_blank" href="/search/%E5%91%BD%E5%90%8D%E7%A9%BA%E9%97%B4/1.htm">命名空间</a> <div>http://www.360doc.com/content/12/0418/10/9437165_204585479.shtml http://blog.csdn.net/wanghuan203/article/details/9203621 http://blog.csdn.net/wanghuan203/article/details/9204337 http://www.cn</div> </li> <li><a href="/article/452.htm" title="Java 求素数运算" target="_blank">Java 求素数运算</a> <span class="text-muted">周凡杨</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E7%B4%A0%E6%95%B0/1.htm">素数</a> <div>网络上对求素数之解数不胜数,我在此总结归纳一下,同时对一些编码,加以改进,效率有成倍热提高。 第一种:   原理: 6N(+-)1法         任何一个自然数,总可以表示成为如下的形式之一: 6N,6N+1,6N+2,6N+3,6N+4,6N+5 (N=0,1,2,…)   </div> </li> <li><a href="/article/579.htm" title="java 单例模式" target="_blank">java 单例模式</a> <span class="text-muted">g21121</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>想必单例模式大家都不会陌生,有如下两种方式来实现单例模式:   class Singleton { private static Singleton instance=new Singleton(); private Singleton(){} static Singleton getInstance() { return instance; }</div> </li> <li><a href="/article/706.htm" title="Linux下Mysql源码安装" target="_blank">Linux下Mysql源码安装</a> <span class="text-muted">510888780</span> <a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a> <div>1.假设已经有mysql-5.6.23-linux-glibc2.5-x86_64.tar.gz (1)创建mysql的安装目录及数据库存放目录       解压缩下载的源码包,目录结构,特殊指定的目录除外:           </div> </li> <li><a href="/article/833.htm" title="32位和64位操作系统" target="_blank">32位和64位操作系统</a> <span class="text-muted">墙头上一根草</span> <a class="tag" taget="_blank" href="/search/32%E4%BD%8D%E5%92%8C64%E4%BD%8D%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/1.htm">32位和64位操作系统</a> <div>32位和64位操作系统是指:CPU一次处理数据的能力是32位还是64位。现在市场上的CPU一般都是64位的,但是这些CPU并不是真正意义上的64 位CPU,里面依然保留了大部分32位的技术,只是进行了部分64位的改进。32位和64位的区别还涉及了内存的寻址方面,32位系统的最大寻址空间是2 的32次方= 4294967296(bit)= 4(GB)左右,而64位系统的最大寻址空间的寻址空间则达到了</div> </li> <li><a href="/article/960.htm" title="我的spring学习笔记10-轻量级_Spring框架" target="_blank">我的spring学习笔记10-轻量级_Spring框架</a> <span class="text-muted">aijuans</span> <a class="tag" taget="_blank" href="/search/Spring+3/1.htm">Spring 3</a> <div>一、问题提问:     → 请简单介绍一下什么是轻量级?     轻量级(Leightweight)是相对于一些重量级的容器来说的,比如Spring的核心是一个轻量级的容器,Spring的核心包在文件容量上只有不到1M大小,使用Spring核心包所需要的资源也是很少的,您甚至可以在小型设备中使用Spring。  </div> </li> <li><a href="/article/1087.htm" title="mongodb 环境搭建及简单CURD" target="_blank">mongodb 环境搭建及简单CURD</a> <span class="text-muted">antlove</span> <a class="tag" taget="_blank" href="/search/Web/1.htm">Web</a><a class="tag" taget="_blank" href="/search/Install/1.htm">Install</a><a class="tag" taget="_blank" href="/search/curd/1.htm">curd</a><a class="tag" taget="_blank" href="/search/NoSQL/1.htm">NoSQL</a><a class="tag" taget="_blank" href="/search/mongo/1.htm">mongo</a> <div>一 搭建mongodb环境 1. 在mongo官网下载mongodb 2. 在本地创建目录 "D:\Program Files\mongodb-win32-i386-2.6.4\data\db" 3. 运行mongodb服务 [mongod.exe --dbpath "D:\Program Files\mongodb-win32-i386-2.6.4\data\</div> </li> <li><a href="/article/1214.htm" title="数据字典和动态视图" target="_blank">数据字典和动态视图</a> <span class="text-muted">百合不是茶</span> <a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%AD%97%E5%85%B8/1.htm">数据字典</a><a class="tag" taget="_blank" href="/search/%E5%8A%A8%E6%80%81%E8%A7%86%E5%9B%BE/1.htm">动态视图</a><a class="tag" taget="_blank" href="/search/%E7%B3%BB%E7%BB%9F%E5%92%8C%E5%AF%B9%E8%B1%A1%E6%9D%83%E9%99%90/1.htm">系统和对象权限</a> <div>数据字典(data dictionary)是 Oracle 数据库的一个重要组成部分,这是一组用于记录数据库信息的只读(read-only)表。随着数据库的启动而启动,数据库关闭时数据字典也关闭   数据字典中包含   数据库中所有方案对象(schema object)的定义(包括表,视图,索引,簇,同义词,序列,过程,函数,包,触发器等等) 数据库为一</div> </li> <li><a href="/article/1341.htm" title="多线程编程一般规则" target="_blank">多线程编程一般规则</a> <span class="text-muted">bijian1013</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/thread/1.htm">thread</a><a class="tag" taget="_blank" href="/search/%E5%A4%9A%E7%BA%BF%E7%A8%8B/1.htm">多线程</a><a class="tag" taget="_blank" href="/search/java%E5%A4%9A%E7%BA%BF%E7%A8%8B/1.htm">java多线程</a> <div>       如果两个工两个以上的线程都修改一个对象,那么把执行修改的方法定义为被同步的,如果对象更新影响到只读方法,那么只读方法也要定义成同步的。        不要滥用同步。如果在一个对象内的不同的方法访问的不是同一个数据,就不要将方法设置为synchronized的。 </div> </li> <li><a href="/article/1468.htm" title="将文件或目录拷贝到另一个Linux系统的命令scp" target="_blank">将文件或目录拷贝到另一个Linux系统的命令scp</a> <span class="text-muted">bijian1013</span> <a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/unix/1.htm">unix</a><a class="tag" taget="_blank" href="/search/scp/1.htm">scp</a> <div>一.功能说明        scp就是security copy,用于将文件或者目录从一个Linux系统拷贝到另一个Linux系统下。scp传输数据用的是SSH协议,保证了数据传输的安全,其格式如下:        scp 远程用户名@IP地址:文件的绝对路径</div> </li> <li><a href="/article/1595.htm" title="【持久化框架MyBatis3五】MyBatis3一对多关联查询" target="_blank">【持久化框架MyBatis3五】MyBatis3一对多关联查询</a> <span class="text-muted">bit1129</span> <a class="tag" taget="_blank" href="/search/Mybatis3/1.htm">Mybatis3</a> <div>以教员和课程为例介绍一对多关联关系,在这里认为一个教员可以叫多门课程,而一门课程只有1个教员教,这种关系在实际中不太常见,通过教员和课程是多对多的关系。   示例数据:   地址表:   CREATE TABLE ADDRESSES ( ADDR_ID INT(11) NOT NULL AUTO_INCREMENT, STREET VAR</div> </li> <li><a href="/article/1722.htm" title="cookie状态判断引发的查找问题" target="_blank">cookie状态判断引发的查找问题</a> <span class="text-muted">bitcarter</span> <a class="tag" taget="_blank" href="/search/form/1.htm">form</a><a class="tag" taget="_blank" href="/search/cgi/1.htm">cgi</a> <div>先说一下我们的业务背景: 1.前台将图片和文本通过form表单提交到后台,图片我们都做了base64的编码,并且前台图片进行了压缩 2.form中action是一个cgi服务 3.后台cgi服务同时供PC,H5,APP 4.后台cgi中调用公共的cookie状态判断方法(公共的,大家都用,几年了没有问题) 问题:(折腾两天。。。。) 1.PC端cgi服务正常调用,cookie判断没</div> </li> <li><a href="/article/1849.htm" title="通过Nginx,Tomcat访问日志(access log)记录请求耗时" target="_blank">通过Nginx,Tomcat访问日志(access log)记录请求耗时</a> <span class="text-muted">ronin47</span> <div>一、Nginx通过$upstream_response_time $request_time统计请求和后台服务响应时间 nginx.conf使用配置方式: log_format main '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_r</div> </li> <li><a href="/article/1976.htm" title="java-67- n个骰子的点数。 把n个骰子扔在地上,所有骰子朝上一面的点数之和为S。输入n,打印出S的所有可能的值出现的概率。" target="_blank">java-67- n个骰子的点数。 把n个骰子扔在地上,所有骰子朝上一面的点数之和为S。输入n,打印出S的所有可能的值出现的概率。</a> <span class="text-muted">bylijinnan</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div> public class ProbabilityOfDice { /** * Q67 n个骰子的点数 * 把n个骰子扔在地上,所有骰子朝上一面的点数之和为S。输入n,打印出S的所有可能的值出现的概率。 * 在以下求解过程中,我们把骰子看作是有序的。 * 例如当n=2时,我们认为(1,2)和(2,1)是两种不同的情况 */ private stati</div> </li> <li><a href="/article/2103.htm" title="看别人的博客,觉得心情很好" target="_blank">看别人的博客,觉得心情很好</a> <span class="text-muted">Cb123456</span> <a class="tag" taget="_blank" href="/search/%E5%8D%9A%E5%AE%A2/1.htm">博客</a><a class="tag" taget="_blank" href="/search/%E5%BF%83%E6%83%85/1.htm">心情</a> <div>   以为写博客,就是总结,就和日记一样吧,同时也在督促自己。今天看了好长时间博客:    职业规划:    http://www.iteye.com/blogs/subjects/zhiyeguihua      android学习:    1.http://byandby.i</div> </li> <li><a href="/article/2230.htm" title="[JWFD开源工作流]尝试用原生代码引擎实现循环反馈拓扑分析" target="_blank">[JWFD开源工作流]尝试用原生代码引擎实现循环反馈拓扑分析</a> <span class="text-muted">comsci</span> <a class="tag" taget="_blank" href="/search/%E5%B7%A5%E4%BD%9C%E6%B5%81/1.htm">工作流</a> <div>     我们已经不满足于仅仅跳跃一次,通过对引擎的升级,今天我测试了一下循环反馈模式,大概跑了200圈,引擎报一个溢出错误      在一个流程图的结束节点中嵌入一段方程,每次引擎运行到这个节点的时候,通过实时编译器GM模块,计算这个方程,计算结果与预设值进行比较,符合条件则跳跃到开始节点,继续新一轮拓扑分析,直到遇到</div> </li> <li><a href="/article/2357.htm" title="JS常用的事件及方法" target="_blank">JS常用的事件及方法</a> <span class="text-muted">cwqcwqmax9</span> <a class="tag" taget="_blank" href="/search/js/1.htm">js</a> <div>事件 描述 onactivate 当对象设置为活动元素时触发。 onafterupdate 当成功更新数据源对象中的关联对象后在数据绑定对象上触发。 onbeforeactivate 对象要被设置为当前元素前立即触发。 onbeforecut 当选中区从文档中删除之前在源对象触发。 onbeforedeactivate 在 activeElement 从当前对象变为父文档其它对象之前立即</div> </li> <li><a href="/article/2484.htm" title="正则表达式验证日期格式" target="_blank">正则表达式验证日期格式</a> <span class="text-muted">dashuaifu</span> <a class="tag" taget="_blank" href="/search/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F/1.htm">正则表达式</a><a class="tag" taget="_blank" href="/search/IT%E5%85%B6%E5%AE%83/1.htm">IT其它</a><a class="tag" taget="_blank" href="/search/java%E5%85%B6%E5%AE%83/1.htm">java其它</a> <div> 正则表达式验证日期格式 function isDate(d){ var v = d.match(/^(\d{4})-(\d{1,2})-(\d{1,2})$/i); if(!v) { this.focus(); return false; } } <input value="2000-8-8" onblu</div> </li> <li><a href="/article/2611.htm" title="Yii CModel.rules() 方法 、validate预定义完整列表、以及说说验证" target="_blank">Yii CModel.rules() 方法 、validate预定义完整列表、以及说说验证</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/yii/1.htm">yii</a> <div>public array rules () {return} array 要调用 validate() 时应用的有效性规则。 返回属性的有效性规则。声明验证规则,应重写此方法。 每个规则是数组具有以下结构:array('attribute list', 'validator name', 'on'=>'scenario name', ...validation </div> </li> <li><a href="/article/2738.htm" title="UITextAttributeTextColor = deprecated in iOS 7.0" target="_blank">UITextAttributeTextColor = deprecated in iOS 7.0</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/ios/1.htm">ios</a> <div>In this lesson we used the key "UITextAttributeTextColor" to change the color of the UINavigationBar appearance to white. This prompts a warning "first deprecated in iOS 7.0." Ins</div> </li> <li><a href="/article/2865.htm" title="判断一个数是质数的几种方法" target="_blank">判断一个数是质数的几种方法</a> <span class="text-muted">EmmaZhao</span> <a class="tag" taget="_blank" href="/search/Math/1.htm">Math</a><a class="tag" taget="_blank" href="/search/python/1.htm">python</a> <div>质数也叫素数,是只能被1和它本身整除的正整数,最小的质数是2,目前发现的最大的质数是p=2^57885161-1【注1】。 判断一个数是质数的最简单的方法如下: def isPrime1(n): for i in range(2, n): if n % i == 0: return False return True 但是在上面的方法中有一些冗余的计算,所以</div> </li> <li><a href="/article/2992.htm" title="SpringSecurity工作原理小解读" target="_blank">SpringSecurity工作原理小解读</a> <span class="text-muted">坏我一锅粥</span> <a class="tag" taget="_blank" href="/search/SpringSecurity/1.htm">SpringSecurity</a> <div>   SecurityContextPersistenceFilter   ConcurrentSessionFilter   WebAsyncManagerIntegrationFilter   HeaderWriterFilter   CsrfFilter   LogoutFilter   Use</div> </li> <li><a href="/article/3119.htm" title="JS实现自适应宽度的Tag切换" target="_blank">JS实现自适应宽度的Tag切换</a> <span class="text-muted">ini</span> <a class="tag" taget="_blank" href="/search/JavaScript/1.htm">JavaScript</a><a class="tag" taget="_blank" href="/search/html/1.htm">html</a><a class="tag" taget="_blank" href="/search/Web/1.htm">Web</a><a class="tag" taget="_blank" href="/search/css/1.htm">css</a><a class="tag" taget="_blank" href="/search/html5/1.htm">html5</a> <div>效果体验:http://hovertree.com/texiao/js/3.htm   该效果使用纯JavaScript代码,实现TAB页切换效果,TAB标签根据内容自适应宽度,点击TAB标签切换内容页。 HTML文件代码: <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"</div> </li> <li><a href="/article/3246.htm" title="Hbase Rest API : 数据查询" target="_blank">Hbase Rest API : 数据查询</a> <span class="text-muted">kane_xie</span> <a class="tag" taget="_blank" href="/search/REST/1.htm">REST</a><a class="tag" taget="_blank" href="/search/hbase/1.htm">hbase</a> <div>hbase(hadoop)是用java编写的,有些语言(例如python)能够对它提供良好的支持,但也有很多语言使用起来并不是那么方便,比如c#只能通过thrift访问。Rest就能很好的解决这个问题。Hbase的org.apache.hadoop.hbase.rest包提供了rest接口,它内嵌了jetty作为servlet容器。   启动命令:./bin/hbase rest s</div> </li> <li><a href="/article/3373.htm" title="JQuery实现鼠标拖动元素移动位置(源码+注释)" target="_blank">JQuery实现鼠标拖动元素移动位置(源码+注释)</a> <span class="text-muted">明子健</span> <a class="tag" taget="_blank" href="/search/jquery/1.htm">jquery</a><a class="tag" taget="_blank" href="/search/js/1.htm">js</a><a class="tag" taget="_blank" href="/search/%E6%BA%90%E7%A0%81/1.htm">源码</a><a class="tag" taget="_blank" href="/search/%E6%8B%96%E5%8A%A8/1.htm">拖动</a><a class="tag" taget="_blank" href="/search/%E9%BC%A0%E6%A0%87/1.htm">鼠标</a> <div>欢迎讨论指正!   print.html代码: <!DOCTYPE html> <html> <head> <meta http-equiv=Content-Type content="text/html;charset=utf-8"> <title>发票打印</title> &l</div> </li> <li><a href="/article/3500.htm" title="Postgresql 连表更新字段语法 update" target="_blank">Postgresql 连表更新字段语法 update</a> <span class="text-muted">qifeifei</span> <a class="tag" taget="_blank" href="/search/PostgreSQL/1.htm">PostgreSQL</a> <div>下面这段sql本来目的是想更新条件下的数据,可是这段sql却更新了整个表的数据。sql如下: UPDATE tops_visa.visa_order SET op_audit_abort_pass_date = now() FROM tops_visa.visa_order as t1 INNER JOIN tops_visa.visa_visitor as t2 ON t1. </div> </li> <li><a href="/article/3627.htm" title="将redis,memcache结合使用的方案?" target="_blank">将redis,memcache结合使用的方案?</a> <span class="text-muted">tcrct</span> <a class="tag" taget="_blank" href="/search/redis/1.htm">redis</a><a class="tag" taget="_blank" href="/search/cache/1.htm">cache</a> <div>公司架构上使用了阿里云的服务,由于阿里的kvstore收费相当高,打算自建,自建后就需要自己维护,所以就有了一个想法,针对kvstore(redis)及ocs(memcache)的特点,想自己开发一个cache层,将需要用到list,set,map等redis方法的继续使用redis来完成,将整条记录放在memcache下,即findbyid,save等时就memcache,其它就对应使用redi</div> </li> <li><a href="/article/3754.htm" title="开发中遇到的诡异的bug" target="_blank">开发中遇到的诡异的bug</a> <span class="text-muted">wudixiaotie</span> <a class="tag" taget="_blank" href="/search/bug/1.htm">bug</a> <div>今天我们服务器组遇到个问题: 我们的服务是从Kafka里面取出数据,然后把offset存储到ssdb中,每个topic和partition都对应ssdb中不同的key,服务启动之后,每次kafka数据更新我们这边收到消息,然后存储之后就发现ssdb的值偶尔是-2,这就奇怪了,最开始我们是在代码中打印存储的日志,发现没什么问题,后来去查看ssdb的日志,才发现里面每次set的时候都会对同一个key</div> </li> </ul> </div> </div> </div> <div> <div class="container"> <div class="indexes"> <strong>按字母分类:</strong> <a href="/tags/A/1.htm" target="_blank">A</a><a href="/tags/B/1.htm" target="_blank">B</a><a href="/tags/C/1.htm" target="_blank">C</a><a href="/tags/D/1.htm" target="_blank">D</a><a href="/tags/E/1.htm" target="_blank">E</a><a href="/tags/F/1.htm" target="_blank">F</a><a href="/tags/G/1.htm" target="_blank">G</a><a href="/tags/H/1.htm" target="_blank">H</a><a href="/tags/I/1.htm" target="_blank">I</a><a href="/tags/J/1.htm" target="_blank">J</a><a href="/tags/K/1.htm" target="_blank">K</a><a href="/tags/L/1.htm" target="_blank">L</a><a href="/tags/M/1.htm" target="_blank">M</a><a href="/tags/N/1.htm" target="_blank">N</a><a href="/tags/O/1.htm" target="_blank">O</a><a href="/tags/P/1.htm" target="_blank">P</a><a href="/tags/Q/1.htm" target="_blank">Q</a><a href="/tags/R/1.htm" target="_blank">R</a><a href="/tags/S/1.htm" target="_blank">S</a><a href="/tags/T/1.htm" target="_blank">T</a><a href="/tags/U/1.htm" target="_blank">U</a><a href="/tags/V/1.htm" target="_blank">V</a><a href="/tags/W/1.htm" target="_blank">W</a><a href="/tags/X/1.htm" target="_blank">X</a><a href="/tags/Y/1.htm" target="_blank">Y</a><a href="/tags/Z/1.htm" target="_blank">Z</a><a href="/tags/0/1.htm" target="_blank">其他</a> </div> </div> </div> <footer id="footer" class="mb30 mt30"> <div class="container"> <div class="footBglm"> <a target="_blank" href="/">首页</a> - <a target="_blank" href="/custom/about.htm">关于我们</a> - <a target="_blank" href="/search/Java/1.htm">站内搜索</a> - <a target="_blank" href="/sitemap.txt">Sitemap</a> - <a target="_blank" href="/custom/delete.htm">侵权投诉</a> </div> <div class="copyright">版权所有 IT知识库 CopyRight © 2000-2050 E-COM-NET.COM , All Rights Reserved. <!-- <a href="https://beian.miit.gov.cn/" rel="nofollow" target="_blank">京ICP备09083238号</a><br>--> </div> </div> </footer> <!-- 代码高亮 --> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shCore.js"></script> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shLegacy.js"></script> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shAutoloader.js"></script> <link type="text/css" rel="stylesheet" href="/static/syntaxhighlighter/styles/shCoreDefault.css"/> <script type="text/javascript" src="/static/syntaxhighlighter/src/my_start_1.js"></script> </body> </html>