基于node.js开发的文章生成器(一、准备章)

简介: # 引言今天带来的是狗屁不通文章生成器第一部分,即输入一个文章题目,和相应的字数,便自动生成一篇对应字数的文章。![image.png](https://ucc.alicdn.com/pic/developer-ecology/y3obldvnqeb54_1ef6d9d62323412f9e4edef8737f9f10.png)如上图那么这么好玩的文章生成器是怎么制作的,接下来带大家制作这个文章生成器# 准备首先创建一个文件夹article,然后切换到article目录下,调出cmd,执行如下代码完成项目的初始化`npm init -y`它会在项目目录下生成一个 pac

引言

今天带来的是狗屁不通文章生成器第一部分,即输入一个文章题目,和相应的字数,便自动生成一篇对应字数的文章。

image.png

如上图
那么这么好玩的文章生成器是怎么制作的,接下来带大家制作这个文章生成器

准备

首先创建一个文件夹article,然后切换到article目录下,调出cmd,执行如下代码完成项目的初始化

npm init -y

它会在项目目录下生成一个 pacakge.json 文件,我们用ide打开这个文件夹,可以看到文件夹中有一个package.json的文件,文件中内容如下

image.png

模块管理

众所周知,在模块管理上,Node.js有CommonJS和ES Modules两种标准,这里我采用ES Modules标准来撰写项目。但是默认初始化的node项目采取了CommonJS的模式,所以我们要在package.json进行配置
在package.json中 加入"type"="moudle"

最终package.json配置文件内容如下:

{
  "name": "article",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "type": "module"
}

准备工作告一段落,接下来进入下一阶段

fs模块进行读取文件

文章生成器的核心功能的实现其实是通过读取后台的语料库,读取功能我们可以通过fs模块来实现

fs的导入

fs是node的一个内置的模块,我们不需要通过npm来下载,我们这个项目采取的是ES Modules标准,所以我们通过import导入fs模块

import fs from 'fs'

完成对fs模块的导入

接下来我们尝试运用fs模块进行文件的读写。

fs读取文件

我们首先在项目目录中创建ceshi.txt,并在其中随便放置一些文字。
然后在项目中创建src目录,并在src目录下创建一个index.js的js文件

文件目录如下:

image.png

接下来我们开始编辑index.js文件,在首行导入fs模块(ES Modules)

fs读取文件可以通过fs.readFile()来进行

代码如下

import fs from 'fs';
fs.readFile('../ceshi.txt',(err,dataStr)=>{
    if(err){
        console.log(err);
    }
    else{
        console.log(dataStr);
    }
})

这几行代码很好理解,因为我们采取ES Modules标准,所以我们通过import来导入所需的fs模块

然后调用fs.readFile()函数,第一个函数填写要读取的路径,我这里采用相对路径的方式,通过../找到src的上一级,再找到ceshi.txt文件,完成读取。

第二个参数我写了一个函数,分别有err和dataStr两个参数,如果读取的时候出现了error,那么error非空则会打印出错误信息,否则没有error,error=null,不会触发打印错误,而是打印读取的dataStr。

接下来我们在控制台,从article目录切换到下一级的src目录,在控制台执行cd src,然后通过node index.js执行代码,完成读取。一定要切换,否则会报出找不到文件的error,解决方案和问题下面再说。

image.png

可以看到,读出来的并不是我们期望的“让我们试一下fs模块好不好用。”而是一大堆字节。那么我们如何解决这个问题呢?这里提供了四种解决方案。

方案一

隐式调用转换字符,将原本的console.log(dataStr);改为console.log(dataStr+"");

成功打印出所期望的文件内容

方案二

显式调用toString()方法

在打印之前,调用toString()函数,完成字节到字符串的转换

else{
        dataStr = dataStr.toString();
        console.log(dataStr);
    }

成功打印出期望字符。

方案三

通过String()的强制类型转换,完成字节到字符的转换

else{
        dataStr = String(dataStr);
        console.log(dataStr);
    }

也是可以成功解决

方案四

直接指定读取文件时的编码,来直接读取字符串

import fs from 'fs';
fs.readFile('../ceshi.txt',{encoding:"utf-8"},(err,dataStr)=>{
    if(err){
        console.log(err);
    }
    else{
        console.log(dataStr);
    }
})

此时读出的dataStr就是我们期望的字符串了

fs读取文件的路径问题及解决方案

上面说过,我们要启动src目录下的index.js必须要先切换到src目录下,再使用node index.js来启动index.js文件,而不能直接执行node src/index.js。

那么这是为什么呢?

原来fs的读文件是针对于当前目录,受启动的环境位置影响。我们在article目录下直接启动

node src/index.js

虽然同样能找到 article/src/index.js,但此时../的路径是相对于article的上一级,所以无法找到ceshi.txt,那么有没有什么解决方案,让我能在任意地方启动js并且还能读取到文件呢?

解决方案一

将readFile中的路径参数由相对路径改为绝对路径。(不推荐)

解决方案二

通过import,meta.url获取一下文件

获取到的结果是: file:///D:/VScodefile3/article/src/index.js

接下来在导入中引入 fileURLToPath 函数

import {fileURLToPath} from 'url';

通过impoort.meta.url获取的路径并不能直接使用,我们使用fileURLToPath()函数进行处理

const pathURL = fileURLToPath(fileURL);

打印一下,结果是D:\VScodefile3\article\src\index.js

接下来我们导入path模块处理

import path from path;

const dirname = path.resolve(pathURL,"../");

通过resolve可以拼接路径并自动处理,上述的dirname的结果是D:\VScodefile3\article\src

已经找到了index.js的所在目录,接下来我们可以继续定位到dirname的上一级,从而找到article目录,继而找到article目录下的ceshi.txt

import fs from 'fs';
import {fileURLToPath} from 'url';
import path from 'path';

const fileURL = import.meta.url;
const pathURL = fileURLToPath(fileURL);
const dirname = path.resolve(pathURL,"../");
const filePath = path.resolve(dirname,"../","ceshi.txt");
fs.readFile(filePath,{encoding:"utf-8"},(err,dataStr)=>{
    if(err){
        console.log(err);
    }
    else{
        console.log(dataStr);
    }
})

最终解决版本如上,下面我们在任意目录中启动index.js都可以找到要读取的ceshi.txt。
第一部分完成,下一文章继续更新这个文章生成器。

相关文章
|
5天前
|
Web App开发 JavaScript 前端开发
Node.js 是一种基于 Chrome V8 引擎的后端开发技术,以其高效、灵活著称。本文将介绍 Node.js 的基础概念
Node.js 是一种基于 Chrome V8 引擎的后端开发技术,以其高效、灵活著称。本文将介绍 Node.js 的基础概念,包括事件驱动、单线程模型和模块系统;探讨其安装配置、核心模块使用、实战应用如搭建 Web 服务器、文件操作及实时通信;分析项目结构与开发流程,讨论其优势与挑战,并通过案例展示 Node.js 在实际项目中的应用,旨在帮助开发者更好地掌握这一强大工具。
20 1
|
5天前
|
开发框架 JavaScript 前端开发
TypeScript 是一种静态类型的编程语言,它扩展了 JavaScript,为 Web 开发带来了强大的类型系统、组件化开发支持、与主流框架的无缝集成、大型项目管理能力和提升开发体验等多方面优势
TypeScript 是一种静态类型的编程语言,它扩展了 JavaScript,为 Web 开发带来了强大的类型系统、组件化开发支持、与主流框架的无缝集成、大型项目管理能力和提升开发体验等多方面优势。通过明确的类型定义,TypeScript 能够在编码阶段发现潜在错误,提高代码质量;支持组件的清晰定义与复用,增强代码的可维护性;与 React、Vue 等框架结合,提供更佳的开发体验;适用于大型项目,优化代码结构和性能。随着 Web 技术的发展,TypeScript 的应用前景广阔,将继续引领 Web 开发的新趋势。
19 2
|
11天前
|
Web App开发 JavaScript 前端开发
深入浅出Node.js后端开发
【10月更文挑战第40天】在这篇文章中,我们将一起探索Node.js的奥秘,从基础概念到实际应用,逐步揭示如何利用Node.js构建高效、可扩展的后端服务。通过实际案例分析,我们将了解Node.js在现代Web开发中的应用,以及如何克服常见的开发挑战。无论你是初学者还是有一定经验的开发者,这篇文章都将为你提供宝贵的见解和实用的技巧,帮助你在Node.js的道路上更进一步。
22 4
|
12天前
|
JavaScript 前端开发 测试技术
探索现代JavaScript开发的最佳实践
本文探讨了现代JavaScript开发中的最佳实践,涵盖ES6+特性、现代框架使用、模块化与代码分割、测试驱动开发、代码质量与性能优化、异步编程、SPA与MPA架构选择、服务端渲染和静态站点生成等内容,旨在帮助开发者提升代码质量和开发效率。
|
15天前
|
Web App开发 JavaScript 前端开发
深入浅出Node.js后端开发
【10月更文挑战第36天】本文将引导您探索Node.js的世界,通过实际案例揭示其背后的原理和实践方法。从基础的安装到高级的异步处理,我们将一起构建一个简单的后端服务,并讨论如何优化性能。无论您是新手还是有经验的开发者,这篇文章都将为您提供新的视角和深入的理解。
|
17天前
|
运维 监控 JavaScript
鸿蒙next版开发:分析JS Crash(进程崩溃)
在HarmonyOS 5.0中,JS Crash指未处理的JavaScript异常导致应用意外退出。本文详细介绍如何分析JS Crash,包括异常捕获、日志分析和典型案例,帮助开发者定位问题、修复错误,提升应用稳定性。通过DevEco Studio收集日志,结合HiChecker工具,有效解决JS Crash问题。
37 4
|
18天前
|
Web App开发 JavaScript 前端开发
探索后端开发:Node.js与Express的完美结合
【10月更文挑战第33天】本文将带领读者深入了解Node.js和Express的强强联手,通过实际案例揭示它们如何简化后端开发流程,提升应用性能。我们将一起探索这两个技术的核心概念、优势以及它们如何共同作用于现代Web开发中。准备好,让我们一起开启这场技术之旅!
35 0
|
3月前
|
JavaScript
NodeJs的安装
文章介绍了Node.js的安装步骤和如何创建第一个Node.js应用。包括从官网下载安装包、安装过程、验证安装是否成功,以及使用Node.js监听端口构建简单服务器的示例代码。
NodeJs的安装
|
2月前
|
JavaScript 开发工具 git
已安装nodejs但是安装hexo报错
已安装nodejs但是安装hexo报错
32 2
|
3月前
|
存储 JavaScript 前端开发
Node 版本控制工具 NVM 的安装和使用(Windows)
本文介绍了NVM(Node Version Manager)的Windows版本——NVM for Windows的安装和使用方法,包括如何安装Node.js的特定版本、列出已安装版本、切换使用不同版本的Node.js,以及其他常用命令,以实现在Windows系统上对Node.js版本的便捷管理。
Node 版本控制工具 NVM 的安装和使用(Windows)
下一篇
无影云桌面