阅读这篇blog大概需要10分钟
继续完善前面的小例子,通过命令参数来传递内容,并通过JSON格式来保存数据。
any application that can be written in JavaScript, will eventually be written in JavaScript. – Atwood定律
继续通过文件读写的功能来完善保存数据的功能。通过JSON来操作,这也是Node后端应用的优势,前后端一致、处理方便快捷:
在终端输入命令:
npm install yargs --save
可以看到yargs的module自动下载安装,并且自动更新了package.json配置文件。
yarg的使用很简单,输入参数会保存在argv变量中。
const yargs = require('yargs');
...
console.log(yargs.argv);
增加参数测试:
node app.js add --title 'abc'
输出:
Starting notes.js
Starting app
{ _: [ 'add' ], title: 'abc', '$0': 'app.js' }
通过yargs._[0]获取命令,然后分别通过argv.title和argv.body获取标题和内容:
app.js:
const argv = yargs.argv;
const command = argv._[0];
...
notes.addNote(argv.title, argv.body);
然后就可以这样来运行程序了:
node app.js add --title 'abc' --body 'this is test'
JSON是JavaScript Object Notation的缩写。在Web应用中使用很广泛。
可以通过标准的JSON函数在JSON对象和字符串之间转换:
测试代码:
const obj = {name: 'andy'};
const stringObj = JSON.stringify(obj);
console.log(typeof stringObj);// string
console.log(stringObj); //{"name":"andy"}
const person = JSON.parse(stringObj);
console.log(typeof person); //object
console.log(person); //{ name: 'andy' }
notes.js:
const fs = require('fs');
console.log('Starting notes.js');
const addNote = (title, body) => {
fs.readFile('notes.json', (err, data) => {
if (err) {
console.log('read file error');
} else {
const notes = JSON.parse(data);
const note = {title, body};
notes.push(note);
fs.writeFile('notes.json', JSON.stringify(notes), err => {
if (err) {
console.log('write file error!');
} else {
console.log('add note successfully!')
}
});
}
});
};
module.exports = {
addNote
}
运行程序,通过参数传递标题和内容:
node app.js add --title 'abc' --body 'this is test'
然后查看保存的JSON数据notes.json:
[{"title":"abc","body":"this is test"},{"title":"abc","body":"this is test"}]
注意readFile()和writeFile()都是异步函数,这里通过嵌套的方式来完成。代码可读性不是特别好。
现在JS有很多不同的方式来改进这一点,有Promise,还有async/await,后面可以开专题学习一下。
Node有完善的生态,大量的标准和第三方模块可以直接使用,非常方便。所有的I/O都支持通过异步来调用,可以快速高效地响应用户。
nodejs-blogs/a03