-
2020-10-18 20:14:36
- 安装node
- 打开命令行,下述命令在Win的CMD控制台
- 创建文件夹
mkdir helloNodejs
- 进入文件夹,
npm init
初始化项目,按提示填写(或直接一路Enter) - 接下来就可以在项目文件夹中编写js文件了
- 使用
node ./index.js
命令即可启动node服务器(入口文件名根据第4步自行修改)
更多相关内容 -
如何用nodejs打开项目中的html文件?
2021-06-12 03:33:56万千封印var http = require("http"),url = require("url"),path = require("path"),fs = require("fs");http.createServer(function (req, res) {var pathname=__dirname+url.parse(req.url)....if (path.extname...万千封印
var http = require("http"),url = require("url"),path = require("path"),fs = require("fs");http.createServer(function (req, res) {var pathname=__dirname+url.parse(req.url).pathname;if (path.extname(pathname)=="") {pathname+="/";}if (pathname.charAt(pathname.length-1)=="/"){pathname+="index.html";}path.exists(pathname,function(exists){if(exists){switch(path.extname(pathname)){case ".html":res.writeHead(200, {"Content-Type": "text/html"});break;case ".js":res.writeHead(200, {"Content-Type": "text/javascript"});break;case ".css":res.writeHead(200, {"Content-Type": "text/css"});break;case ".gif":res.writeHead(200, {"Content-Type": "image/gif"});break;case ".jpg":res.writeHead(200, {"Content-Type": "image/jpeg"});break;case ".png":res.writeHead(200, {"Content-Type": "image/png"});break;default:res.writeHead(200, {"Content-Type": "application/octet-stream"});}fs.readFile(pathname,function (err,data){res.end(data);});} else {res.writeHead(404, {"Content-Type": "text/html"});res.end("
404 Not Found
");}});}).listen(8080, "127.0.0.1");console.log("Server running at http://127.0.0.1:8080/"); -
nodejs项目windows下开机自启动的方法
2020-12-23 07:24:251. 在需要自启动的项目中安装 node-windows 模块 npm install node-windows –save 2. 在项目根目录创建nw.js文件 代码截图如下: 代码文本: 3. 运行nw.js文件 命令:...4. 现在就可以连接nodejs项目,Nodejs项目开 -
nodejs在本地创建项目并运行
2021-12-04 17:46:20一:下载nodejs并安装到本地 下载 | Node.js 中文网 选择对应的系统下载即可。 下载后,本地安装即可。 安装完成后,本地打开命令窗口: Win+R 输入cmd 输入node -v 显示出版本号 说明 ...一:下载nodejs并安装到本地
选择对应的系统下载即可。
下载后,本地安装即可。
二:安装完成后,本地打开命令窗口:
Win+R 输入cmd
输入node -v 显示出版本号 说明nodejs安装成功。
三:在本地磁盘上创建一个项目文件夹:
(1):进入文件夹test内,按住shift点击右键,选择在此处打开命令窗口:
【因为我本地电脑安装了powershell,所以是调用powershell打开】
(2):或者Win+R 输入cmd打开dos命令窗口。然后使用命令行切换到对应的盘符目录下:
四:下面我们以powershell为例子来讲解,dos命令窗口操作亦是如此。
1:输入npm init 创建package.json
【npm是随同NodeJS一起安装的包管理工具】
命令行里会以交互的形式让你填一些项目的介绍信息,依次介绍如下:(不知道怎么填的直接回车、回车...)
name 项目名称
version 项目的版本号
description 项目的描述信息
entry point 项目的入口文件
test command 项目启动时脚本命令
git repository 如果你有 Git 地址,可以将这个项目放到你的 Git 仓库里
keywords 关键词
author 作者叫啥
license 项目要发行的时候需要的证书,平时用不到的化直接忽略它即可。
最后输入yes
在文件夹下就生成了一个package.json文件。
打开package.json 文件查看一下:
继续在命令行中输入npm install express --save
参考express官网命令:
命令执行完之后,文件夹下多出了两个文件。
npm命令加了--save后,依赖包的版本信息就会写入package.json文件中。
我们打开package.json文件
对比没有执行npm install express -save之前的信息发现,多出了express的版本号。
因为上面命令行中entry point 项目的入口文件我们选择的是默认回车选择的是 index.js文件,所以,我们要在项目文件夹下创建index.js文件。
使用编辑器打开index.js,打开express官网,快速入门下找到Hello world
复制Hello world的示例代码,粘贴到index.js中
然后在powershell命令行中输入命令:node index.js 启动
复制命令行中打印的http://localhost:3000到浏览器中访问。
看到打印出了Hello World 说明整个流程已经跑通了。
赶快动手一试!
PS:
如果需要将本地的这个测试项目搬到服务器上使用的话,只需在服务器上新建一个文件夹,把项目文件中除了node_modules外的文件上传,然后使用npm install命令安装即可。服务器就会按照package.json文件自动安装相关的依赖包。
然后登录相关的服务器控制台,把访问接口3000放开,通过服务器绑定的域名:3000即可访问该程序了。
-
linux 下部署nodejs项目(两种方式)
2020-09-15 11:52:38本篇文章主要介绍了linux 下部署nodejs项目(两种方式),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 -
Nodejs研究项目
2021-02-14 07:16:09如何执行在命令行上运行npm install 运行npm start或dev 打开浏览器并打开URL CSS参考 -
nodejs 新建项目入门指南
2017-12-28 18:11:05nodejs 入门教程,这是真正的入门哈,咱也是刚接触node不久,文档只记录怎么新建一个项目,从安装node npm vs code 到创建项目,到打开浏览器查看执行结果 关键步骤都有截图说明的 -
实战——NodeJs项目
2019-06-20 10:03:02NodeJs项目 功能描述 用户登录(基于cookie、session和redis实现登录) 博客的创建、编辑、删除、查询(基于mysql实现数据的增删改查) 通过Nginx的反向代理来解决跨域问题 总体使用的是MVC的设计模式来进行的 ...NodeJs项目
功能描述
- 用户登录(基于cookie、session和redis实现登录)
- 博客的创建、编辑、删除、查询(基于mysql实现数据的增删改查)
- 通过Nginx的反向代理来解决跨域问题
总体使用的是MVC的设计模式来进行的
项目依赖
nodejs:使用原生nodejs提供的各种模块
mysql:使用mysql包来实现nodejs读取mysql数据库中的数据
redis:使用redis来存储session的数据
cross-env:项目运行的环境变量
默认已经会了上述的几个包的使用
安装需要
- mysql数据库来存储项目数据
- 需要安装redis来处理session数据的存储
- 需要安装Nginx来处理反向代理
项目开发
数据库设计
这是一个比较小的项目,数据库中存储的数据只有两类,用户以及博客
用户表(users)
字段名 字段类型 是否主键 描述 id int Primary Key 自增,非空 username varchar(20) 用户名,非空 password varchar(20) 密码,非空 realname varchar(10) 真名,非空 博客表(blogs)
字段名 字段类型 是否主键 描述 id int Primary Key 自增,非空 title varchar(50) 标题,非空 content longtext 博客内容,非空 createtime bigint 创建时间,时间戳,非空 author varchar(20) 作者,非空 项目结构设计
- 目录结构
- www.js是服务器的创建
- app.js是服务器处理程序
- router文件夹是路由模块
- config是数据库配置模块(mysql和redis)
- db在这里就是MVC中的M,用于数据处理
- controller是MVC中的C,用户数据与视图的衔接处理
- model文件夹这里只是用于处理响应的数据,是数据模型
node-blog |----bin |---- www.js |----node_modules |----src |----config |----db.js |----controller |----blog.js |----user.js |----db |----mysql.js |----redis.js |----model |----resModel.js |----router |----blog.js |----user.js |----app.js |----package.json
-
数据配置及获取
db.js 数据库的配置文件(mysql和redis)
// 该项目是模拟实际的开发情形,因此我们需要根据不同的运行环境来进行区分不同的配置,当然在这里我们其实只有一种运行环境,那就是本地环境,但是我们写的需要规范 const env = process.env.NODE_ENV // 环境参数 let MYSQL_CONF let REDIS_CONF // 本地环境 if (env === 'dev') { // mysql 配置 MYSQL_CONF = { host: 'localhost', user: 'root', password: 'root', database: 'myblog', port: 3306 } // redis 配置 REDIS_CONF = { port: 6379, host: '127.0.0.1' } } // 线上环境 if (env === 'production') { MYSQL_CONF = { host: 'localhost', user: 'root', password: 'root', database: 'myblog', port: 3306 } // redis 配置 REDIS_CONF = { port: 6379, host: '127.0.0.1' } } module.exports = { MYSQL_CONF, REDIS_CONF }
-
mysql
mysql.js数据库操作(Model层)
const mysql = require('mysql') const { MYSQL_CONF } = require('../config/db') const con = mysql.createConnection(MYSQL_CONF) // 开始连接 con.connect() // 统一执行sql的函数 // 可能会疑惑这里没有数据库的关闭操作,是不是不安全,因为我们这里是通过promise操作的,如果这里我们关闭了数据库,后面就无法获取数据,会报错 function exec(sql) { const promise = new Promise((resolve, reject) => { con.query(sql, (err, result) => { if (err) return reject(err) return resolve(result) }) }) return promise } module.exports = { exec }
在实际开发中其实可以用class和单例模式结合的方式来进行控制,保证只有一个实例访问就行了
所谓class和单例模式结合就是:执行构造函数的时候进行判断,如果构造函数已经执行则不再执行
使用es6提供的static 来创建静态方法
-
redis
在redis中存储的数据是键值对的方式,
redis.js
const redis = require("redis") const { REDIS_CONF } = require('../config/db') const redisClient = redis.createClient(REDIS_CONF) redisClient.on('error', err => { console.error(err); }) function set(key, val) { if (typeof val === 'object') { val = JSON.stringify(val) } redisClient.set(key, val, redis.print) } function get(key) { const promise = new Promise((resolve, reject) => { redisClient.get(key, (err, val) => { if (err) return reject(err) // console.log(val) if (val == null) { return resolve(null) } try { resolve(JSON.parse(val)) } catch (error) { resolve(val) } }) }) return promise } module.exports = { set, get }
-
-
用户登录
/controller/user.js(Controller层)
这部分就是根据用户名和密码通过sql语句去数据库中查询,返回响应数据
const { exec } = require('../db/mysql') const login = (username, password) => { const sql = `select username,realname from users where username='${username}' and password = ${password}` return exec(sql).then(rows => { // console.log(rows[0]) return rows[0] || {} }) } module.exports = { login }
/router/user.js (路由)
const { login } = require('../controller/user') const { SuccessModel, ErrorModel } = require('../model/resModel') const { set } = require('../db/redis') const handleUserRouter = (req, res) => { const method = req.method // 登录 if (method === 'POST' && req.path === "/api/user/login") { const { username, password } = req.body const result = login(username, password) return result.then(data => { if (data.username) { // 设置session req.session.username = data.username req.session.realname = data.realname // 每次登陆成功后需要把用户信息存储到Redis中去,这样就算服务器重启也不会影响之前的登录信息,因为redis和后端服务器也是分离的 set(req.sessionId, req.session) return new SuccessModel() } return new ErrorModel('用户登录失败') }) } } module.exports = handleUserRouter
-
博客管理
/controller/blog.js (Controller层)
const { exec } = require('../db/mysql') const { get } = require('../db/redis') const getSession = (sessionId) => { return get(sessionId).then(session => { return JSON.parse(session) || {} }) } // 这里where 1 = 1 是一个取巧的操作,这个操作既不会影响我们获取的数据,同时也可以简单了我们后面拼接其他条件,不然的话还需要在今天是否要加where的判断 const getList = (author = '', keyword = '') => { let sql = `select * from blogs where 1=1 ` if (author) { sql += `and author='${author}' ` } if (keyword) { sql += `and title like '%${keyword}%' ` } sql += `order by createtime desc` // 返回一个promise return exec(sql) } const getDetail = (id) => { // 返回假数据 const sql = `select * from blogs where id = ${id}` return exec(sql).then(rows => { return rows[0] }) } const newBlog = (blogData = {}) => { // blogData 是一个博客对象,包含title、 content 、author属性 const title = blogData.title const content = blogData.content const author = blogData.author const createtime = Date.now() const sql = `insert into blogs (title,content,createtime,author) values('${title}','${content}',${createtime},'${author}')` return exec(sql).then(insertData => { return { id: insertData.insertId } }) } const updataBlog = (id, blogData = {}) => { // id 要更新博客的id // blogdata 是一个博客对象,包含title content属性 const title = blogData.title const content = blogData.content const sql = `update blogs set title = '${title}' , content = '${content}' where id = ${id}` return exec(sql).then(updateData => { // console.log(updateData) if (updateData.affectedRows > 0) { return true } return false }) } const delBlog = (id, author) => { // id 是删除博客的id const sql = `delete from blogs where id = ${id} and author = '${author}'` return exec(sql).then(deleteData => { if (deleteData.affectedRows > 0) { return true } return false }) } module.exports = { getList, getDetail, newBlog, updataBlog, delBlog, getSession }
都是一些增删改查的操作,自己看吧
/router/blog.js (路由)
登录检查是为了保证用户只能对自己的blog进行修改删除增加
const { getList, getDetail, newBlog, updataBlog, delBlog, getSession } = require('../controller/blog') // 解构赋值的方式直接取相应的方法 const { SuccessModel, ErrorModel } = require('../model/resModel') // 统一的登录验证函数 // 去查看之前的登录状态,这里就简单判断了用户名是否存在 const loginCheck = (req) => { if (!req.session.username) { return Promise.resolve(new ErrorModel('尚未登录')) } } const handleBlogRouter = (req, res) => { const method = req.method const id = req.query.id // 获取博客列表 if (method === 'GET' && req.path === '/api/blog/list') { let author = req.query.author || '' const keyword = req.query.keyword || '' // 这里的操作是为了让用登录后查看的是自己的列表在admin.html页面的时候 if (req.query.isadmin) { const loginCheckResult = loginCheck(req) if (loginCheckResult) { // 如果有值表示未登录 return loginCheckResult } author = req.session.username } // 调用方法获取博客列表 const result = getList(author, keyword) return result.then(listData => { return new SuccessModel(listData) }) } // 获取博客详情 if (method === "GET" && req.path === '/api/blog/detail') { const result = getDetail(id) return result.then(data => { return new SuccessModel(data) }) } // 新建一篇博客 if (method === "POST" && req.path === "/api/blog/new") { const loginCheckResult = loginCheck(req) if (loginCheckResult) { // 如果有值表示未登录 return loginCheckResult } req.body.author = req.session.username console.log(req.session.username) const result = newBlog(req.body) return result.then(data => { return new SuccessModel(data) }) } // 更新一篇博客 if (method === "POST" && req.path === "/api/blog/update") { const loginCheckResult = loginCheck(req) if (loginCheckResult) { // 如果有值表示未登录 return loginCheckResult } const result = updataBlog(id, req.body) return result.then(val => { if (val) { return new SuccessModel() } else { return new ErrorModel('更新博客失败') } }) } // 删除一篇博客 if (method === "POST" && req.path === "/api/blog/del") { const loginCheckResult = loginCheck(req) if (loginCheckResult) { // 如果有值表示未登录 return loginCheckResult } const author = req.session.username console.log(id, author) const result = delBlog(id, author) return result.then(val => { if (val) { return new SuccessModel() } else { return new ErrorModel('删除博客失败') } }) } } module.exports = handleBlogRouter
-
其他代码
app.js(这个才是真正的入口,www.js其实就是启动一下服务器)
const urlObj = require('url') const handleBlogRouter = require("./src/router/blog") const handleUserRouter = require("./src/router/user") const { set, get } = require('./src/db/redis') // 获取cookie的过期时间 const getCookieExpires = () => { const d = new Date() d.setTime(d.getTime() + (24 * 60 * 60 * 1000)) // console.log(d.toGMTString()) return d.toGMTString() } // 用于处理post data const getPostData = (req) => { const promise = new Promise((resolve, reject) => { if (req.method !== "POST") { return resolve({}) } if (req.headers['content-type'] !== 'application/json') { return resolve({}) } let postData = '' req.on('data', chunk => { postData += chunk.toString() }) req.on('end', () => { // console.log(postData) if (!postData) return resolve({}) return resolve(JSON.parse(postData)) }) }) return promise } // 设置返回格式 JSON const serverHandle = (req, res) => { res.setHeader('content-type', 'application/json') req.path = urlObj.parse(req.url, true).pathname // console.log(req.url) /api/blog/list?author=zhangsan&keyword=A // 获取请求参数,增加true后会转换成一个对象 req.query = urlObj.parse(req.url, true).query // 处理cookie // 因为cookie是也是一些键值对的方式,但是是字符串的形式,因此需要做如下处理 req.cookie = {} const cookieStr = req.headers.cookie || '' cookieStr.split(';').forEach(item => { if (!item) return const arr = item.split('=') const key = arr[0].trim() const val = arr[1].trim() // console.log(key, val) req.cookie[key] = val }) // 解析session let needSetCookie = false let userId = req.cookie.userid req.sessionId = userId // 登录状态的保持,每次进行路由前会去判断一下用户之前是否登录了(如果执行一些增删改的操作) // 从redis中去获取数据,类似数据库的获取操作,因为这是一个异步的操作,因此我们就需要把后续的操作放到then里去保证我之前的数据已经获取了(用户信息) get(req.sessionId).then(sessionData => { if (sessionData == null) { set(req.sessionId, {}) req.session = {} } else { req.session = sessionData } // 处理post数据 return getPostData(req) }).then(postData => { req.body = postData const blogResult = handleBlogRouter(req, res) if (blogResult) { blogResult.then(blogData => { // 第一次请求的时候就把cookie设置了响应回去 if (needSetCookie) { res.setHeader('Set-Cookie', `userid=${userId}; path=/; httpOnly;expires=${getCookieExpires()}`) } res.end(JSON.stringify(blogData)) }) return } const userResult = handleUserRouter(req, res) if (userResult) { userResult.then(userData => { if (needSetCookie) { res.setHeader('Set-Cookie', `userid=${userId}; path=/; httpOnly;expires=${getCookieExpires()}`) } res.end(JSON.stringify(userData)) }) return } // 未命中路由 返回404 res.writeHead(404, { 'content-type': 'text/plain' }) res.end("404 Not Found\n") }) } module.exports = serverHandle
resModel.js
这个文件是为了设置响应数据的格式
class BaseModel { /** * 构造函数 * @param {Object} data 数据 * @param {string} message 信息 */ constructor(data, message) { if (typeof data === 'string') { /* 做参数兼容,如果没有出入message, 那么直接把data赋给message */ [data, message] = [message, data] } if (data) this.data = data if (message) this.message = message } } class SuccessModel extends BaseModel { constructor(data, message) { super(data, message) this.errno = 0 } } class ErrorModel extends BaseModel { constructor(data, message) { super(data, message) this.errno = -1 } } module.exports = { SuccessModel, ErrorModel }
www.js
创建服务器
const http = require('http') const serverHandle = require('../app') const PORT = 8000 const server = http.createServer(serverHandle) server.listen(PORT)
package.json
{ "name": "node-blog", "version": "1.0.0", "description": "", "main": "bin/www.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1", //这里是配置的一些环境,本地环境 "dev": "cross-env NODE_ENV=dev nodemon ./bin/www.js", // 线上环境 "prd": "cross-env NODE_ENV=production nodemon ./bin/www.js" }, "keywords": [], "author": "", "license": "ISC", "dependencies": { "cross-env": "^5.2.0", "mysql": "^2.17.1", "redis": "^2.8.0" } }
项目部署
Nginx反向代理
Nginx介绍
- 高性能的Web服务器
- 一般用于做静态服务器、负载均衡(我们暂时用不到)
- 反向代理(我们这里要用)
为什么会需要反向代理呢?
因为我们现在运行的在两个不同的地址中
web服务器 http://localhost:8001
nodejs服务 http://localhost:8000
这就会导致一个问题那就是 “跨域”,当然处理跨域的方式有很多种,这里我们就通过使用Nginx的反向代理来实现
还有一个原因就是cookie存在跨域不共享,所以就需要使用反向代理
反向代理说明
其实就是在服务器访问web服务器和后端服务器的时候,先通过Nginx来作为中介,以localhost/index.html为例,Nginx会判断路径是哪个,如果是 /…的就把你导向web服务器,如果是请求接口的就导向nodejs后端服务器
自行下载安装后,在安装的文件中有个conf文件夹,我们需要对立面的nginx.conf文件进行配置
我们用VSCode直接打开文件就行,然后如下配置,上面有个port(端口)自己配置就行,不要是被使用的端口就可以。注意这里不是js中的对象,不要习惯性的用冒号来进行赋值,是用空格的
可以在通过执行 nginx -t 来测试配置的是否有问题,如果没报错就没问题了
然后直接输入nginx.exe 启动就行,不要关掉
页面说明
因为这是nodejs的项目,所以HTML页面就不再这里进行贴了,大家自己简单的写一写就行,数据展示以及ajax数据的请求,相信这对于看这个的小伙伴来说是信手拈来的
总共就6个页面,每个页面都不超过100行的代码(反正我是这样的,怎么简单怎么来,再丑也是自己看的,主要是关注nodejs的功能)
index.html 用于展示所有博客信息
detail.html 用于展示博客详情
admin.html 用于用户自己管理博客
new.html 用于新增博客
edit.html 用于编辑博客
login.html 用于登录博客
运行
说明
根据自己再Nginx中配置的端口,直接在浏览器中运行,我是配置了8080,因此就直接http://localhost:8080/index.html
运行的时候需要保持数据是联通的、Nginx是开启的、redis也是开启的,不然无法跑起来
我把项目里的node_modules删了,大家自己npm install一下就行,反正有package.json文件
nodejs的文件 在终端输入
意思是在本地运行,这个在package.json中进行配置了
npm run dev
也许我在这里的一些表述可能不够准确,如果有错误欢迎提出来,我会改的~~大家如果也尝试过这个后会发现用原生Nodejs来写项目好麻烦啊,so 后面会用express和Koa来重新写一遍这个项目
最后附上一下代码吧,想看的可以看,nodejs的基本上都已经贴了,也就HTML页面了
-
Nodejs项目的创建
2021-06-29 16:31:08以此创建package.json文件,如下图(此处在文件夹中打开命令提示符,除了创建了文件,还安装了jquery的第三方模块) npm i -save xxx:安装到node_modules目录下并且安装到依赖(package.json中的"dependencies")... -
MobileNet_image_classification:该NodeJs项目演示了使用Mobile Net进行图像分类
2021-05-08 04:13:09MobileNet_image_classification 该NodeJs项目演示了使用Mobile Net进行图像分类科技二手1。 Tensorflow js(预训练模型) 2。 Js,HTML,CSS 3。 节点Js和Express所用型号:MobileNet 在此处查看有关mobilenet的更... -
nodejs运行vue项目
2020-04-23 16:59:461、下载nodejs 官网:https://nodejs.org/en/ (下图是我下载的版本) 2、下载后压缩包 3、开始安装 安装很简单,默认下一步,就可以了(中间可选择安装路径)安装后里面的文件如图 4、安装后判断是否... -
webstorm导入新的nodejs项目
2022-03-09 08:10:452、打开用webstorm项目后,在项目的package.json目录下管理员运行cmd。 3、不成功,长期停在fetchMetadata -> network,转用淘宝镜像地址下载依赖模块, (1)可以先检测一下npm的源是不是淘宝的镜像源npm ... -
新建NodeJS Web项目的几个最佳实践
2019-05-16 06:49:14在项目建立初期引入一些最佳实践可以避免后期大量复杂的重构工作,本文总结了在使用Node JS构建...对于一个NodeJS项目,不需要我们从npm init初始化起,自己一步步安装一些依赖。 Express命令 Express是目前最流行... -
M2实现Nodejs项目自动部署的方法步骤
2020-10-17 01:21:29主要介绍了M2实现Nodejs项目自动部署的方法步骤,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧 -
nodeJs项目在阿里云的简单部署
2021-01-19 23:21:15nodeJS在阿里云的简单部署,供大家参考,具体内容如下 日志样例 近期将毕设的基本接口写完,全部采用nodeJS+express完成...在后端服务部署前,我们得确认自己的服务将使用哪些端口,然后在阿里云控制台打开端口安全策 -
nodejs在应用内打开默认浏览器
2021-04-28 11:14:49electron+vue的项目内要求有个跳转直播功能,直接放链接或者window方法的话会在应用内跳转。跳转之后不可控,所以还是通过nodejs来 //打开默认浏览器 const openDefaultBrowser = function (url) { var exec = ... -
nodejs项目实战教程01——http服务和URL类
2021-10-29 11:10:27nodejs项目实战教程01——http服务和URL类1.开发准备2.如何创建一个简单的nodejs应用3.如何创建一个http服务4.如何获取url中的参数4.1 URL类基础4.2 动态监测URL的变化 1.开发准备 去官网下载和安装nodejs和vscode,... -
nodeJS 运行项目 webstorm
2020-01-03 16:21:11第一步 package.json - 右键 --- show npm scripts 第二部 在显示的npm 窗口 跟运行mave 一样 双击 start 需要打包成 html 的 , npm install 就会在 项目根目录 dist 中生成 带有index.html 的主页。... -
nodeJS项目创建
2018-11-11 12:52:54来用命令创建一个nodejs项目 通过idea或者pycharm之类的创建项目的过程中有很多坑 安装node.js插件 创建nodes.js项目 设置项目配置(除了项目名称和路径外其他的按默认走) 正常情况下会报错 Error creating Node.... -
nodejs项目怎么运行?
2021-06-25 05:03:46nodejs项目怎么运行?下面本篇文章就来给大家介绍一下nodejs项目的运行步骤,希望对大家有所帮助。1、在nodejs项目上新建一个run.bat文件,node app.js>>console.txt,然后用在新建一个vb脚本,扩展名为.vbs并... -
宝塔部署nodejs项目
2022-06-14 15:33:37宝塔部署nodejs项目 -
【超详细小白教学】Vue+nodejs电商项目部署指南
2021-01-22 13:48:58【超详细小白教学】Vue电商项目部署指南 前言 食用指南:推荐照着我的设置来走。 在最前面,厚着老脸,跟大家要一个star。 ???? 本项目Github源码 1 准备工作 1.1 云服务器购买 进入阿里云官网 找到上边导航栏的产品... -
tau-pact-nodejs-course:为测试自动化大学课程创建的Pact NodeJs项目
2021-04-30 16:12:57测试自动化大学课程的PactJS项目一个简单的Nodejs + Jest项目,使用PactJS配置合同测试如果您按照这些在本地运行pact代理,则可以运行提供程序并按原样发布,否则,您需要将pactUrl修改为本地路径,并且如果您将... -
服务器部署Nodejs项目
2021-04-06 20:44:26服务器部署Nodejs项目配置服务器连接服务器安装Node.js安装MySQL安装MySQL配置MySQL数据库的迁移部署NodeJS项目通过软件手动文件拖拽过去通过Git仓库代码托管到Git仓库代码clone到服务器通过Git将代码克隆到本地... -
NodeJS启动vue项目的坑
2022-01-10 10:46:48现在前端都使用了vue 而启动vue项目需要先安装nodejs 但是启动中会出现很多坑 下面来梳理下并给出几点建议 1.首先需要选择一个稳定版本的node 太高级的版本出现问题的话 也很难在网上找到别人的解决方法 2.很多... -
10个成功使用Node.js的公司、10个成功的NodeJS大项目。
2020-03-02 08:49:17国内有NodeJS应用大项目? 有,据称,国内的12306,也用nodejs开发。12306高峰流量之大,难以想像,足以证明nodejs性能之好。 弊端 如果说弊端,也确实有,比如NodeJS也是JS,代码是明文的,容易被COPY,为了防止... -
NodeJSTypeScriptBoilerPlate:Typescript NodeJS项目的样板
2021-03-05 08:18:10#样板NodeJS-Typescript 样板为NodeJS项目使用内置Typescript ,方便安装和预先定义的配置。特征安装克隆。 为项目的环境配置创建.env文件。 打开NOTES.md以获取env说明。 执行npm install或yarn install来安装依赖... -
Vscode NodeJS Express创建项目
2021-12-29 22:29:201、新建NodeJS SourceCode目录,例如:D:\nodejs_src 2、打开VsCode,并打开上述目录 3、安装Express插件 4、打开Vscode终端(Terminal),执行以下指令指令 npm install express-generator -g 5、执行以下指令...