https://www.mongodb.com/try/download/community
ubantu20.04
wget https://repo.mongodb.org/apt/ubuntu/dists/focal/mongodb-org/7.0/multiverse/binary-amd64/mongodb-org-server_7.0.4_amd64.deb
centos7
wget https://repo.mongodb.org/yum/redhat/7/mongodb-org/7.0/x86_64/RPMS/mongodb-org-server-7.0.4-1.el7.x86_64.rpm
rpm -ivh mongodb-org-server-7.0.4-1.el7.x86_64.rpm
# which mongod
/usr/bin/mongod
mkdir -p /opt/app/mongodb/{data,log}
mongod --port=27017 --dbpath=/opt/app/mongodb/data --logpath=/opt/app/mongodb/log/mongodb.log --bind_ip=0.0.0.0 --fork
# netstat -tunlp |grep mongo
tcp 0 0 0.0.0.0:27017 0.0.0.0:* LISTEN 201/mongod
connecting to: mongodb://127.0.0.1:27017
客户端 compass
https://www.mongodb.com/products/tools/compass
https://www.mongodb.com/try/download/shell
https://downloads.mongodb.com/compass/mongosh-2.1.1-x64.msi
命令行版
wget https://downloads.mongodb.com/compass/mongodb-mongosh-2.1.1.x86_64.rpm
yum localinstall mongodb-mongosh-2.1.1.x86_64.rpm
[root@nd ~]#
[root@nd ~]# mongosh
Current Mongosh Log ID: 6572d8e7f2aa0e8293805e94
Connecting to: mongodb://127.0.0.1:27017/?directConnection=true&serverSelectionTimeoutMS=2000&appName=mongosh+2.1.1
Using MongoDB: 7.0.4
Using Mongosh: 2.1.1
For mongosh info see: https://docs.mongodb.com/mongodb-shell/
------
The server generated these startup warnings when booting
2023-12-08T03:01:12.236-05:00: Access control is not enabled for the database. Read and write access to data and configuration is unrestricted
2023-12-08T03:01:12.236-05:00: You are running this process as the root user, which is not recommended
2023-12-08T03:01:12.236-05:00: vm.max_map_count is too low
------
Deprecation warnings:
- Using mongosh on the current operating system is deprecated, and support may be removed in a future release.
See https://www.mongodb.com/docs/mongodb-shell/install/#supported-operating-systems for documentation on supported platforms.
test> db
test
test> show dbs
admin 40.00 KiB
bnew-development 8.00 KiB
config 108.00 KiB
local 40.00 KiB
创建数据库
test> use bnew-development
switched to db bnew-development
bnew-development> db
bnew-development
yarn global add yo@4.3.1 yarn global add generator-express@2.17.2 yarn global add npm-check export PATH=/wks/nodejs/bnew/node_modules/.bin:$PATH [xt@nd nodejs]$ yo express ? Would you like to create a new directory for your project? Yes ? Enter directory name bnew ? Select a version to install: MVC ? Select a view engine to use: Pug ? Select a css preprocessor to use: Sass ? Select a database to use: MongoDB ? Select a build tool to use: Gulp
package.json
{
"name": "bnew",
"version": "0.0.1",
"private": true,
"main": "app.js",
"scripts": {
"start": "node app.js",
"test": "NODE_ENV=test mocha --recursive test",
"test:coverage": "nyc npm test",
"test:unit": "mocha --recursive test/middleware test/models test/routes",
"test:integration": "mocha --recursive test/integration"
},
"dependencies": {
"@fortawesome/fontawesome-free": "^5.15.3",
"async": "^3.2.4",
"axios": "^0.27.2",
"body-parser": "^1.13.3",
"bootstrap": "^5.0.2",
"compression": "^1.7.4",
"connect-flash": "^0.1.1",
"cookie-parser": "^1.3.3",
"cropper": "^4.1.0",
"cropperjs": "^1.5.12",
"del": "^6.0.0",
"express": "^4.13.3",
"express-session": "^1.17.3",
"express-validator": "^6.14.2",
"generator-express": "^2.17.2",
"glob": "^7.2.0",
"jquery": "^3.6.0",
"jquery-cropper": "^1.0.1",
"jsdom": "^19.0.0",
"method-override": "^3.0.0",
"mongoose": "^6.8.0",
"morgan": "^1.6.1",
"natives": "^1.1.6",
"passport": "^0.6.0",
"passport-local": "^1.0.0",
"passport-local-mongoose": "^7.1.2",
"path": "^0.12.7",
"pug": "^3.0.2",
"serve-favicon": "^2.3.0",
"svg-captcha": "^1.4.0",
"ueditor": "^1.2.3",
"webpack": "^5.72.1",
"webpack-stream": "^7.0.0"
},
"devDependencies": {
"@babel/core": "^7.14.6",
"@babel/plugin-transform-runtime": "^7.14.5",
"@babel/preset-env": "^7.14.7",
"@babel/register": "^7.14.5",
"@babel/runtime": "^7.14.6",
"babel-core": "^7.0.0-bridge.0",
"babel-loader": "^8.2.5",
"babel-polyfill": "^6.26.0",
"chai": "^4.3.6",
"debug": "^4.3.3",
"gulp": "^4.0.2",
"gulp-babel": "^8.0.0",
"gulp-clean-css": "^4.3.0",
"gulp-concat": "^2.6.1",
"gulp-livereload": "^4.0.2",
"gulp-nodemon": "^2.0.2",
"gulp-plumber": "^1.0.0",
"gulp-rename": "^2.0.0",
"gulp-sass": "^5.1.0",
"gulp-uglify": "^3.0.2",
"gulp-uglify-es": "^2.0.0",
"install": "^0.13.0",
"mocha": "^9.2.1",
"node-sass": "^6.0.1",
"npm-check": "^6.0.1",
"nyc": "^15.1.0",
"regenerator-runtime": "^0.13.7",
"sass": "^1.35.2",
"supertest": "^6.2.2",
"vinyl-named": "^1.1.0",
"yo": "^4.3.1"
}
}
安装
yarn install
配置babel与gulp
.babelrc文件
{
"presets": [ "@babel/preset-env" ],
"plugins": [ "@babel/plugin-transform-runtime" ]
}
删除原来的gulpfile.js文件,创建gulpfile.babel.js
const gulp = require('gulp');
// var babel = require("gulp-babel");
const compiler = require('webpack');
const webpack = require('webpack-stream');
const nodemon = require('gulp-nodemon');
const plumber = require('gulp-plumber');
const named = require('vinyl-named'); // 名字缩写
const uglify = require('gulp-uglify-es').default; //支持ES6的一些写法
const livereload = require('gulp-livereload');
const sass = require('gulp-sass')(require('sass'));
const glob = require('glob');
const path = require('path')
require('babel-polyfill');
let cssTasks = new Map();
//读取src/css/admin/*.scss = > public/css/admin
let cssFiles = glob.sync(__dirname + '/src/css/+(admin|blog|include)/*.scss');
// console.log(cssFiles);
cssFiles.forEach(cssFile => {
//给每个文件添加一个task,当某一个文件修改时,不至于编译所有文件
let dest = path.dirname(cssFile.replace('src', 'public'));
cssTasks.set(cssFile, function(cb){
gulp.src(cssFile)
.pipe(plumber())
.pipe(sass({outputStyle: 'compressed'}))
.pipe(gulp.dest(dest))
.pipe(livereload());
cb();
});
});
function css(cb){
gulp.series(...cssTasks.values());
cb();
}
//-------------------js-------------------------------------------------
let jsTasks = new Map();
let jsFiles = glob.sync(__dirname + '/src/js/+(admin|blog|jihe)/*.js');
jsFiles.forEach(jsFile => {
//给每个文件添加一个task,当某一个文件修改时,不至于编译所有文件
let dest = path.dirname(jsFile.replace('src', 'public'));
jsTasks.set(jsFile, function(cb){
// console.log(jsFile);
gulp.src(jsFile)
.pipe(plumber())
.pipe(named()) //名字缩写
.pipe(webpack({
mode: 'development',
watch: true,
module: {
rules: [{
test: /\.js$/,
exclude: path.resolve(__dirname,'node_modules/'),
use: {
loader: 'babel-loader',
options: {
presets: ["@babel/preset-env"],
compact: false,
plugins: ["@babel/plugin-transform-runtime"]
}
}
}]
}
},compiler))
.pipe(uglify()) //加强ES6语法支持
.pipe(gulp.dest(dest))
.pipe(livereload());
cb();
});
});
function js(cb){
gulp.series(...jsTasks.values());
cb();
}
//-------------------img-------------------------------------------------
function img(cb){
gulp.src('./src/img/*.*')
.pipe(gulp.dest('./public/img/'))
.pipe(livereload());
cb();
}
function watch(cb){
// gulp.watch('./src/css/*.scss', gulp.parallel(css));
for(let [key, value] of cssTasks.entries()){
// console.log(value);
gulp.watch(key, gulp.parallel(value));
}
// gulp.watch('./src/js/**/*.js', gulp.parallel(js));
for(let [key, value] of jsTasks.entries()){
// console.log(value);
gulp.watch(key, gulp.parallel(value));
}
gulp.watch('./src/img/*.*', gulp.parallel(img));
cb();
}
function develop(cb){
livereload.listen();
nodemon({
script: 'app.js',
ext: 'js coffee pug',
stdout: false
}).on('readable', function () {
this.stdout.on('data', (chunk) => {
if (/^Express server listening on port/.test(chunk)) {
livereload.changed(__dirname);
}
});
this.stdout.pipe(process.stdout);
this.stderr.pipe(process.stderr);
});
cb();
}
exports.default = gulp.parallel(img, css, js, watch, develop);
创建src目录
rsync -rltDv /opt/tpf/nodejs/myblog/blog1/src ./ src的目录结构与gulpfile.babel.js中的目录结构一致就可以了
启动gulp
[xt@nd bnew]$ gulp
...
...
...
(node:1673) [MONGOOSE] DeprecationWarning: Mongoose: the `strictQuery` option will be switched back to `false` by default in Mongoose 7. Use `mongoose.set('strictQuery', false);` if you want to prepare for this change. Or use `mongoose.set('strictQuery', true);` to suppress this warning.
(Use `node --trace-deprecation ...` to show where the warning was created)
[03:25:52] /wks/nodejs/bnew reloaded.
Express server listening on port 3000
至此成功启动项目
访问:
http://localhost:3000/
看到页面上显示两行:
Generator-Express MVC
Welcome to Generator-Express MVC
config/config.js 配置数据库地址
db: 'mongodb://localhost/bnew-development' 修改为自己的IP:PORT db: 'mongodb://127.0.0.1:27017/bnew-development'
su - root mongod --port=27017 --dbpath=/opt/app/mongodb/data --logpath=/opt/app/mongodb/log/mongodb.log --bind_ip=0.0.0.0 --fork
su - xt cd /wks/nodejs/bnew gulp
app.js是总入口,引入所有的js文件
const models = glob.sync(config.root + '/app/models/*.js');
models.forEach(function (model) {
require(model);
});
接下来是要让js与对应的页面views关联起来,这由express完成,app.js引入config/express.js
const app = express();
module.exports = require('./config/express')(app, config);
将app,config作用为参数传给了express
express引入所有页面
app.set('views', config.root + '/app/views');
app.set('view engine', 'pug');
引入所有的路由,其中路由指定了访问的配对关系
var controllers = glob.sync(config.root + '/app/controllers/*.js');
controllers.forEach((controller) => {
require(controller)(app);
});
//根路径定义
module.exports = (app) => {
app.use('/', router);
};
//若要访问根目录/,就转到views目录下的index为前缀的页面
router.get('/', (req, res, next) => {
Article.find((err, articles) => {
if (err) return next(err);
res.render('index', {
title: 'Generator-Express MVC',
articles: articles
});
});
});
最后编译为静态文件后,所有的js都放一起了