报错解决
1、nrm ls 命令报错
如图:
解决方法:
根据上图标出的 路径 找到 cli.js 将第17行做如下修改。
如图:
将第17行注释,添加第18行代码,第18行代码如下:
const NRMRC = path.join(process.env[(process.platform == 'win32') ? 'USERPROFILE' : 'HOME'], '.nrmrc');
2、执行命令:gulp [任务名],报错
如图:
源代码为:
将源代码做如下修改(修改处已作标记):
3、搭建服务器,进行请求判断时报错
源代码:
// 引用 创建网站服务器的模块
const http = require('http');
// app对象即为网站服务器对象
const app = http.createServer();
// 对客户端请求做出反应
app.on('request', (req, res) => {
// 1、获取请求方式
// req.method
console.log(req.method);
if (req.method == 'POST') {
res.end('post')
} else if (req.method == 'GET') {
res.end('get')
}
// 2、获取请求地址
// req.url
console.log(req.url);
if (req.url == '/index') {
res.end('welcome to homepage');
} else if (req.url == '/list') {
res.end('welcome to listpage');
} else {
res.end('not found');
}
// res.end('<h2>hello user</h2>');
});
// 监听 3000 端口
app.listen(3000);
// 网站服务器启动成功标志
console.log('网站服务器启动成功')
运行后以上代码后,再次访问网站报错:
原因:
res.end() 函数的作用是:结束此次响应,告诉客户端所有的消息已经发送。当服务器中所有的响应的内容发送完毕时,该函数必须被调用一次。如果不调用该函数,客户端将永远处于等待状态。
解决方法:除却最后使用的 res.end()函数,将此之前 res.end() 函数 替换为 res.write() 函数,具体操作如下:
// 引用 创建网站服务器的模块
const http = require('http');
// app对象即为网站服务器对象
const app = http.createServer();
// 对客户端请求做出反应
app.on('request', (req, res) => {
// 1、获取请求方式
// req.method
console.log(req.method);
if (req.method == 'POST') {
res.write('post')
} else if (req.method == 'GET') {
res.write('get')
}
// 2、获取请求地址
// req.url
console.log(req.url);
if (req.url == '/index') {
res.write('welcome to homepage!');
} else if (req.url == '/list') {
res.write('welcome to listpage!');
} else {
res.write('not found!');
}
res.end(' This response ends!');
});
// 监听 3000 端口
app.listen(3000);
// 网站服务器启动成功标志
console.log('网站服务器启动成功')
4、node.js中,API:url 被弃用
解析URL地址使用URL类,无需引用API。
如下:
app.on('request', (req, res) => {
res.writeHead(200, {
'content-type': 'text/html;charset=utf8'
});
// 1、获取请求报文信息
// req.headers
// console.log(req.headers.host);
// 2、获取请求地址
// req.url
console.log(req.url);
const myURL = new URL('req.url');
console.log(myURL);
但是吧,鄙人技术有限,愣是没成功,索性就换了另一种方法。(在此希望有大佬可以指点一二)
如下:
引用了 url-parse API,最终得以成功。
url-parse 的具体使用请见:git-hub之url-parse详情
5、win10系统下,为将数据导入mongodb数据库,须安装与配置 mongoimport 。
笔者选择 .zip 下载解压后如图:
然后将文件夹移至 mongodb所在文件夹(笔者重命名了文件夹)
然后复制 mongoimport.exe 文件的路径
然后进入 高级系统配置 → 单机环境变量
进行如下操作:
6、向mongodb数据库导入数据库,命令行使用 mongoimport 命令失败
PS E:\nodejsDB\test> mongoimport -d playground -c users --file .\user.json
2021-07-03T23:36:19.974+0800 connected to: mongodb://localhost/
2021-07-03T23:36:20.000+0800 Failed: cannot decode array into a D
2021-07-03T23:36:20.001+0800 0 document(s) imported successfully. 0 document(s) failed to import.
错误原因:文件格式声明错误 应将 --file 改为 -- jsonArray,即:
PS E:\nodejsDB\test> mongoimport -d playground -c users --jsonArray .\user.json
2021-07-03T23:37:56.966+0800 connected to: mongodb://localhost/
2021-07-03T23:37:57.059+0800 6 document(s) imported successfully. 0 document(s) failed to import.
7、数据库连接失败
原因: 未启动 MongoDB 服务
解决方法:
1、图形界面
ctrl + shift + esc 打开任务管理器 → 打开服务列表,找到 MongoDB服务 → 右击,启动
2、字符界面
net start MongoDB 启动服务
net stop MongoDB 停止服务
8、(2021.7.6)express 获取POST参数,不再使用 body-parser 方法(已弃用)。最新版 express内置了获取POST参数方法,示例:
const express = require('express');
// 创建网站服务器
const server = express();
// 拦截所有请求
// extended: false 方法内部使用 queryString模块处理请求参数的格式
// extended: true 方法内部使用 第三方模块qs处理请求参数的格式
server.use(express.urlencoded({ extended: false }));
server.post('/add', (req, res) => {
// 接收post请求参数
res.send(req.body);
console.log(req.body);
});
// 监听端口 3000
server.listen(3000);
console.log('服务器启动成功');