㈠ 怎麼在webpack里用koa
1. 為什麼用 webpack? 他像 Browserify, 但是將你的應用打包為多個文件. 如果你的單頁面應用有多個頁面, 那麼用戶只從下載對應頁面的代碼. 當他么訪問到另一個頁面, 他們不需要重新下載通用的代碼. 他在很多地方能替代 Grunt 跟 Gulp 因為他能夠
㈡ 如何優雅的在 koa 中處理錯誤
使用中間件統一處理錯誤
有了上面的說明,那現在我們就來看看在 koa 裡面怎麼優雅的實現統一錯誤處理。
答案就是使用強大的中間件!
我們可以在業務邏輯中間件(一般就是 MVC 中的 Controller)開始之前定義下面的中間件:
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
app.use(function* (next) {
try {
yield* next;
} catch(e) {
let status = e.status || 500;
let message = e.message || '伺服器錯誤';
if (e instanceof JsonError) { // 錯誤是 json 錯誤
this.body = {
'status': status,
'message': message
};
if (status == 500) {
// 觸發 koa 統一錯誤事件,可以列印出詳細的錯誤堆棧 log
this.app.emit('error', e, this);
}
return;
}
this.status = status;
// 根據 status 渲染不同的頁面
if (status == 403) {
this.body = yield this.render('403.html', {'err': e});
}
if (status == 404) {
this.body = yield this.render('404.html', {'err': e});
}
if (status == 500) {
this.body = yield this.render('500.html', {'err': e});
// 觸發 koa 統一錯誤事件,可以列印出詳細的錯誤堆棧 log
this.app.emit('error', e, this);
}
}
});
可以看到,我們直接執行 yield* next,然後 catch 執行過程中任何一個中間件的錯誤,然後根據錯誤的「特性」,分別進行不同的處理。
有了這個中間件,我們的業務邏輯 controller 中的代碼就可以這樣來觸發錯誤:
JavaScript
1
2
3
4
5
6
7
8
9
10
11
const router = new (require('koa-router'));
router.get('/some_page', function* () {
// 直接拋出錯誤,被中間件捕獲後當成 500 錯誤
throw new PageError('發生了一個致命錯誤');
throw new JsonError('發送了一個致命錯誤');
// 帶 status 的錯誤,被中間件捕獲後特殊處理
this.throw(403, new PageError('沒有許可權訪問'));
this.throw(403, new JsonError('沒有許可權訪問'));
});
對 Error 分類
上面的代碼裡面出現的 JsonError、PageError,實際上是繼承於 Error 的兩個構造器。代碼如下:
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
const util = require('util');
exports.JsonError = JsonError;
exports.PageError = PageError;
function JsonError(message) {
Error.call(this, message);
}
util.inherits(JsonError, Error);
function PageError(message) {
Error.call(this, message);
}
util.inherits(PageError, Error);
通過繼承 Error 構造器,我們可以將錯誤進行細分,從而能更精細的對錯誤進行處理。
㈢ koa api路由和頁面路由怎麼處理
你是兩個路由器做的中繼(wds)嗎,如果是的話,你的從路由器應該設置了一個ip地址,這個地址跟你主路由器在一個段但是又不一樣,如果你使用電腦的網關進入的話只能進入主路由器,從路由器應該還有一個地址的,想一下咯,再不行重置一下路由器,然後電腦連接到lan口,ip自動獲取,然後在cmd命令窗口輸入 ipconfig/all看一下網關地址,用網關地址登錄就可以了
㈣ koa-body怎麼動態指定上傳文件路徑
在Java中可以用struts2實現多個文件同時上傳代碼,功能代碼如下: 1、upload.jsp頁面(選擇上傳文件) 文件標題:選擇文件-:選擇文件二:選擇文件三: 2、action代碼如下: //對應的Action依次遍歷所有文件域,然後生成對應的輸入文件流,輸出...
㈤ 虛擬機koa部署網頁,打開顯示亂碼
出現這種情況很有可能是系統缺少中文字體或者是說字元編碼,可嘗試通過以下方法解決:
1、安裝中文語言包[root@server ~]# yum -y install fonts-chinese。
2、如果安裝了,還是顯示有問題,可修改瀏覽器中的設置:
中文版:查看--編碼--簡體中文(GB2312)
英文版:View--Character Encoding--Chinese Simplified(GB2312)。
Koa 應用程序是一個包含一組中間件函數的對象,它是按照類似堆棧的方式組織和執行的。
㈥ mpvue+koa+mysql小程序開發,從資料庫中取出的數據無法顯示到頁面上
辦法很多:
1、可以把文本導入excel,然後把excel導入資料庫。
2、可以使用工具軟體,比如powerbuilder,管理資料庫表特別方便,打開資料庫表之後,菜單和工具欄就有import操作,可以選擇txt文本文件,一下就導入了。
3、也可以編一段小程序,逐步讀去txt文本中數據,然後寫入資料庫表中。
㈦ koa2中把從資料庫里查到的數據保存到session中保存不上
//不是很清楚koa有么有重寫sessionStorage的方法,原生的方法如下,因為只支持存儲字元串,所以使用JSON.stringify()轉成字元串
sessionStorage.setItem('userinfo',JSON.stringify({username:'666',password:'666'}))
//獲取時使用JSON.parse()轉成對象即可
let{userinfo,password}=JSON.parse(sessionStorage.setItem('userinfo'))
㈧ koa-static與koa-router是不是不好相處
頁面渲染沒有問題。
但是如果是下面這一種
router
.get('/users/:user', function *(next) yield 渲染模板
㈨ 在koa中post請求中接收不到頁面傳到的值
ajax不是你這么用的,jQuery的post方法你都沒有寫返回函數,你怎麼知道你的值傳過去了?js沒錯,但php有錯,任何非變數都需要加引號! js不變,$.post(url,{data:value},function(data) { alert(data) }) 記得php的輸出字元加上引號
㈩ 如何選擇Node.js Web開發框架
Node.js非常適用於Web開發,但是現在無論是一個網站,還是Web
App都已經成為包括很多不同部分,如前端、資料庫、業務模塊、功能模塊等等的大型項目,使用Node.js從零開始進行Web開發,也許大中型團隊能夠
勝任,但對於個人和小型團隊來說是不現實的。這時候框架就成為Web開發利器,對於個人開發來說幾乎是必不可少。那麼如何選擇Node.js
Web開發框架呢?
首先,我們必須要弄清楚的是,我們需要的是——
程序 or 框架?
程序是已經成型的應用,你需要的是為它搭建環境、添加配置,然後就可以運行起來;框架則是應用的骨架,你需要為它添加數據模型、業務邏輯,它才能成為應用,開始提供服務。
事實上,對於Web開發來說,程序和框架的區別正越來越模糊,比如幾乎婦孺皆知的Wordpress,它是一個博客程序,但它豐富的插件以及
高度的
自定義能夠支持很大程度上的二次開發,在這點上它比起一些PHP框架也並不遜色。我個人認為,如果重心在於提供服務而不是掌握技術,有WordPress
這樣的程序是沒有必要使用框架的。
可惜的是,由於Nodejs還很年輕,目前還沒有WordPress這樣的程序,因此目前在Node.js開發里,如果想做出自己想要的作品,框架是必然的選擇。如果是某些特定類型的應用,可以嘗試一些開源的程序,比如要用Nodejs做博客,有Hexo、Ghost等。
Node.js Web框架有哪些?
Node.js里的Web框架分為API框架和Web應用框架。前者能夠開發出RESTful的API,後者也能開發出RESTful API,但還包括模板、渲染等為前端所准備的功能。
API框架的使用場景是為跨平台應用提供統一的數據模型,而渲染由前端/客戶端自行解決。目前比較知名的API框架有
restify(文檔、Github、NPM)
ActionHero.js(官網、Github、NPM)
LoopBack(官網、Github、NPM)
Frisby(官網、Github、NPM)
Fortune.js(官網、Github、NPM)
Web應用框架顧名思義,就是為了打造Web應用所開發的框架。這里有兩種風格的Web應用框架。
一個是Sinatra風格,另一個是Rails風格。Sinatra和Rails都是Ruby語言的Web框架,後者的影響力更大也更為知名。這里簡單的解釋一下兩種風格是什麼意思。
Sinatra風格是指高度可配置,注重開發的自由度。代表性的Nodejs Web框架有:
Express(官網、Github、NPM)TJ大神開發,Node.js官方推薦
hapi(官網、Github、NPM)
koa.js(官網、Github、NPM)
flaliron(官網、Github、NPM)
total.js(官網、Github、NPM)
locomotive(官網、Github、NPM)
Rails風格則是指不重復自己和約定優於配置,以及嚴格遵循MVC結構開發。代表性的框架有:
Sails.js(官網、Github、NPM)
geddy(官網、Github、NPM)
CompoundJS(官網、Github、NPM) 原railswayjs
這兩種風格無所謂誰優誰劣,全憑使用者的偏好。
而在這兩種Web框架之外,還有更大型的框架,即全棧框架,其中的代表是MEAN。