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都放一起了