node.js を使用して、website_node.js のフロントエンドとバックエンドを作成します。
node.js では何ができるのでしょうか?このようなプロジェクトに触れる機会がありませんが、どこで広く使われているのかはまだわかりません。好きだから、暇なときにウェブサイトとバックエンドを作りました。テクノロジーが好きであれば、それを使って遊ぶことはできますが、それをプロジェクトで使用するには、多くの問題を解決するのに時間を費やさなければならないという真実を私は深く理解しています。
使用されているテクノロジー:
特急+翡翠
sqlite + 続編
レディス
1. 翡翠について
サポートが含まれます。例: include ./includes/header ヘッダーは部分ビューであり、asp.net ユーザー コントロールと同様です。
サポートが延長されます。 例: extends ../layout はマスター ページ レイアウトを使用します。
for ループもとてもシンプルです。
userList の各項目 (サーバーによってフロントエンドに渡される userList 変数)
tr
td #{アイテム.ユーザー名}
td #{item.telephone}
td #{item.email}
追加を優先します:
../admin_layout
を拡張します ヘッドを追加
link(rel='stylesheet', href='/stylesheets/font-awesome.css')
script(src='/javascripts/bootstrap.js')
script(src='/javascripts/bootstrap-wysiwyg.js')
script(src='/javascripts/jquery.hotkeys.js')
コンテンツをブロック
追加は、すべてのステップとスタイルをマスター ページのヘッダーの後ろに置きます。
2.sequelize は ORM フレームワークを実装します。 sqlite mysql mongodb をサポート
定義モデル (記事):
var Article = sequelize.define('記事',{
タイトル:{
タイプ: Sequelize.STRING、
検証:{}
}、
コンテンツ:{タイプ:Sequelize.STRING、検証:{}}、
アイコン:{タイプ:Sequelize.STRING、検証:{}}、
アイコン名:{タイプ:Sequelize.STRING}、
シーケンス:{タイプ:Sequelize.STRING、検証:{}}
}、{
クラスメソッド:{
//記事カテゴリ
GetCountAll:function(objFun){
}//end getCountAll
}//クラスメソッドを終了
});
Article.belongsTo(カテゴリ);
Article.belongsTo(Category); 各記事にはカテゴリがあります。
Sequelize の初期化時にページング関連のメソッドを書きました。このように、各モデルを定義するとこのメソッド(pageOffset、pageLimit)が存在することになります。
var sequelize = new Sequelize('データベース', 'ユーザー名', 'パスワード', {
// スクライト!今すぐ!
方言: 'sqlite'、
// sqlite のストレージ エンジン
// - デフォルトの ':memory:'
ストレージ: config.sqlitePath,
定義:{
クラスメソッド:{
pageOffset:function(pageNum){
if(isNaN(pageNum) || pageNum ページ番号 = 1;
}
return (pageNum - 1) * this.pageLimit();
}、
pageLimit:function(){
10 を返します。 //每页显表示10条
}、
totalPages:function(totalNum){
var total =parseInt((totalNum this.pageLimit() - 1) / this.pageLimit()),
arrayTotalPages = [];
for(var i=1; i arrayTotalPages.push(i);
}
arrayTotalPages を返す;
}
}、
インスタンスメソッド:{
}
}
});
使用:
Article.findAndCountAll({include:[Category],offset:Article.pageOffset(req.query.pageNum),limit:Article.pageLimit()}).success(function(row){
res.render('article_list', {
タイトル: '文章管理'、
記事リスト : row.rows,
ページ:{
totalPages:Article.totalPages(row.count),
currentPage:req.query.pageNum,
ルーター:'記事'
}
});
});
保存モデル:
exports.add = function(req, res) {
var form = new formidable.IncomingForm();
form.uploadDir = path.join(__dirname, '../files');
form.keepExtensions = true;
form.parse(req, function(err, フィールド,ファイル){
var //iconPath = files.icon.path,
//index = iconPath.lastIndexOf('/') icon = path.basename(files.icon.path), // iconPath.substr(index 1,iconPath.length -index),
アイコン名 = files.icon.name;
var title = フィールド.タイトル;
id = フィールド.記事ID;
タイトル = フィールド.タイトル,
コンテンツ = フィールド.コンテンツ,
mincontent = フィールド.mincontent,
sequencing=fields.sequencing == 0 ? 0 : 1、
カテゴリ = フィールド.カテゴリ;
Article.sync(); //存在しない場合はテーブルを作成します。
カテゴリ.find(カテゴリ).success(function(c){
vararticle = Article.build({
タイトル : タイトル、
コンテンツ:コンテンツ、
mincontent:mincontent,
アイコン:アイコン、
アイコン名:アイコン名、
シーケンス:シーケンス
});
Article.save()
.success(function(a){
a.setCategory(c);
return res.redirect('/admin/article');
});
}); //カテゴリ終了
});
}
パス.ベース名:
//iconPath = files.icon.path,
//index = iconPath.lastIndexOf('/') icon = path.basename(files.icon.path), // iconPath.substr(index 1,iconPath.length -index),
获取文件名、比如:/a/b/aa.txt =>ああ.txt。 最初は文字列を使用しても実現できましたが、オペレーティング システムの例外により問題が発生する可能性があります。mac では '/' を使用します。 window の下は '\' です。私もデプロイが完了した後に発生する問題です。その後に path.basename を直接置換します (文言の確認が少ない、就吃動します)。node.js の好みは追加 1 分です。:)
3. redis は定期的なメッセージを保存し、変更されたデータを最小限に抑えます。
getCountAll:function(objFun){
redis.get('articles_getCountAll', function(err,reply){
if(err){
console.log(err);
return;
}
if(reply === null){
db.all('SELECT count(articles.CategoryId) as count,categories.name,categories.id FROM 記事の左側は、articles.categoryID = カテゴリ.id でグループ化します。articles.CategoryId ', function(err,row){
redis.set('articles_getCountAll',JSON.stringify(row));
objFun(row);
});
}その他{
objFun(返信);
}
});
このメソッドはモデル層で定義されます。 Expressなので極力MVCを使って開発しています。 実際、ルートはコントローラー層の機能を実装します (ルート フォルダーの名前はコントローラーにする必要があります)。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック

Discuz のバックグラウンド ログイン問題の解決策が明らかになりました。特定のコード サンプルが必要です。インターネットの急速な発展に伴い、Web サイトの構築がますます一般的になってきました。Discuz は、一般的に使用されるフォーラム Web サイト構築システムとして、次のユーザーに好まれています。多くのウェブマスター。しかし、その強力な機能ゆえに、Discuz を使用する際にバックグラウンドでのログインの問題などの問題が発生することがあります。本日は、Discuz のバックグラウンド ログインの問題の解決策を明らかにし、具体的なコード例を提供します。

ノンブロッキングおよびイベント駆動に基づいて構築されたノード サービスには、メモリ消費量が少ないという利点があり、大量のネットワーク リクエストの処理に非常に適しています。大量のリクエストを前提として、「メモリ制御」に関する問題を考慮する必要があります。 1. V8 のガベージ コレクション メカニズムとメモリ制限 Js はガベージ コレクション マシンによって制御されます

この記事では、NodeJS V8 エンジンのメモリとガベージ コレクター (GC) について詳しく説明します。

ファイル モジュールは、ファイルの読み取り/書き込み/開く/閉じる/削除の追加など、基礎となるファイル操作をカプセル化したものです。ファイル モジュールの最大の特徴は、すべてのメソッドが **同期** と ** の 2 つのバージョンを提供することです。 asynchronous**、sync サフィックスが付いているメソッドはすべて同期メソッドであり、持たないメソッドはすべて異種メソッドです。

ノード用の Docker イメージの選択は些細なことのように思えるかもしれませんが、イメージのサイズと潜在的な脆弱性は、CI/CD プロセスとセキュリティに大きな影響を与える可能性があります。では、最適な Node.js Docker イメージを選択するにはどうすればよいでしょうか?

WordPress バックエンドのコードの文字化けが心配ですか?これらの解決策を試してください。具体的なコード例が必要です。Web サイト構築で WordPress が広く使用されるようになったことで、多くのユーザーが WordPress バックエンドでコードが文字化けする問題に遭遇する可能性があります。このような問題が発生すると、バックグラウンドの管理インターフェースが文字化けして表示され、ユーザーに多大な迷惑をかけてしまいます。この記事では、WordPress バックエンドでの文字化けのトラブルを解決するための一般的な解決策をいくつか紹介します。 wp-config.php ファイルを変更し、wp-config を開きます。

Node.js はどのように GC (ガベージ コレクション) を行うのでしょうか?次の記事で詳しく説明します。

イベント ループは Node.js の基本的な部分であり、メイン スレッドがブロックされていないことを確認することで非同期プログラミングが可能になります。イベント ループを理解することは、効率的なアプリケーションを構築するために重要です。次の記事では、Node のイベント ループについて詳しく説明します。お役に立てれば幸いです。
