标签归档:nodejs

Nodejs listen eacces 的问题

今天在Ubuntu使用NodeJS,创建服务器,监听80端口:

node app.js

报错:

events.js:85
      throw er; // Unhandled 'error' event
            ^
Error: listen EACCES
    at exports._errnoException (util.js:746:11)
    at Server._listen2 (net.js:1139:19)
    at listen (net.js:1182:10)
    at Server.listen (net.js:1267:5)
    at Object.<anonymous> (/home/ubuntu/app.js:8:4)
    at Module._compile (module.js:460:26)
    at Object.Module._extensions..js (module.js:478:10)
    at Module.load (module.js:355:32)
    at Function.Module._load (module.js:310:12)
    at Function.Module.runMain (module.js:501:10)

在我这里,出现这个问题是因为没有用管理员身份执行代码。也就是说,改用:

sudo node app.js

就可以了。

NodeJS 结合 SailsJS 使用简单说明

这两在看NodeJS和ExpressJS,感觉上手挺快的。然后有同学说ExpressJS的扩展SailsJS用起来比ExpressJS爽,于是,就开始了SailsJS的学习之路。在本文中,会简单地介绍我目前了解到的SailsJS在NodeJS环境中从安装到配置和使用。

本文只说明通过sails创建项目,其它方式我还不懂。
阅读全文 NodeJS 结合 SailsJS 使用简单说明

NodeJS+Sailsjs+MongoDB 的留言板小例子

  • NodeJS+Sails+MongoDB 做的十分十分十分简单的例子(留言板)。
  • 前面使用expressjs作为MVC框架,有同学说换sailsjs,然后就尝试了一下。
  • 例子中没有路由的配置,因为sails有blueprint自动路由。
  • 静态文件的引用,和expressjs只有路径不同(assettt和public)。
  • MongoDB数据库的连接不管自己手动管理,只需要在config/connections.js 和 models.js 中配置就可以用了, 添加,查询,删除数据都很简单 Model.create, Model.destroy, Model.find 直接使用(要注意的是,这里的Model是模型名称, 也就是在 Models 文件夹下添加文件,比如在 api/Models 文件夹下有文件 User.js,那么在 controller中使用就是 User.creae 等。 测试的时候,看官方文档直接写的Model,我也写成Model,在这里搞了好久才明白要写成实体名(刚接触MVC,请不要贱笑)。) 而在express中,我是搬运编写了数据库的那部分代码(因为也只接触了半天,不知道是不是express中也有类似的处理)。
  • 界面还是使用了Bootstrap的CSS,jQuery的ajax和DOM操作, 视图模板使用的是EJS(不过。。这个是废话,在这个例子里面,没有用到任何真正模板相关的东西, 最多就是用到了sails提供的layout。这个layout的使用是在config/views.js 里面配置的。 我刚开始没有注意到,直接在index.ejs模板文件中写了这些东西,包括引用css和js, 后来检查才发现页面中自动引用asset下面的js文件,css文件不清楚,我想如果assets/styles目录下有其它css文件,应该也会 自动引用的)。

本来准备用REST处理请求的,在express里面直接 req.get().post().delete().put() 这样就可以。 但是在sails里面看了好久,没看懂怎么用。看了官方的例子 https://github.com/balderdashy/sails/tree/master/lib/hooks/blueprints/actions 感觉好复杂,暂时不管这个问题了。
阅读全文 NodeJS+Sailsjs+MongoDB 的留言板小例子

NodeJS中向MongoDB添加数据后,获取添加数据id的方法

今天在向MongoDB中添加数据的时候,想要得到添加数据的_id,奈何直接使用collection.insertOne没有返回这样的信息。去翻看MongoDB的API,找到了这样一个方法:

collection.bulkWrite([{
			insertOne:{document: theObjectToInsert }
	}], function (err, result) {
		assert.equal(null, err);
		invokeCallback.call(callback, result);
		db.close();
	}
);

说明一下,bulkWrite好像是用来操作一组方法的。bulkWrite的第一个参数是一个数组,这个数组中包含了操作类型(insertOne)和目标对象(theObjectToInsert)。回调函数的第二个参数result中,有一个insertedIds属性,这个属性的值是数组,里面存放的就是向数据库中添加数据所使用的_id

也就是说,在只insert了一个对象的时候,可以直接使用

var _id = result.insertedIds[0];

来取到新添加数据的_id

函数bulkWrite的详细说明参见:
http://mongodb.github.io/node-mongodb-native/2.0/api/Collection.html#bulkWrite

NodeJS+Expressjs+MongoDB 的留言板小例子

使用NodeJS+ExpressJS+MongoDB 做的十分十分十分简单的例子。例子中有路由的配置,静态文件的引用,MongoDB数据库的连接,添加,查询,删除数据。界面使用了Bootstrap的CSS,jQuery的ajax和DOM操作,视图模板使用的是EJS。东西很简单,不过对需要学习入门的同学来说,应该还是可以借鉴一下的。
阅读全文 NodeJS+Expressjs+MongoDB 的留言板小例子

NodeLogger 简单NodeJS日志记录工具

NodeLogger 是一个简单的NodeJs的日志工具,支持输出到console和文件。可以配置日志的输出方式和日志的文件名。
使用示例:

var NodeLogger = require('./Logger.js').NodeLogger;

//  NodeLogger.TO_CONSOLE | NodeLogger.TO_FILE 指同时向控制台和文件输出
var log = new NodeLogger('日志', {target: NodeLogger.TO_CONSOLE | NodeLogger.TO_FILE, filename: 'logfilename'});

log.log('这是日志信息');
log.debug('这是 debug 日志信息');
log.info('这是 info 日志信息');
log.warn('这是 warn 日志信息');
log.error('这是 error 日志信息');

阅读全文 NodeLogger 简单NodeJS日志记录工具

nodejs 读文件

nodejs 读文件很简单,分为同步和异步。

准备模块

var fs = require('fs');
var filename = process.argv[2];

同步读取为

var text = fs.readFileSync(filename)

异步读取为

fs.readFile(filename, function (error, text) {
    if (error) {
        console.error(error);
        return;
    }
    if (!text) {
        return;
    }
    
    console.log(text.toString());
});

nodejs 参数

通过控制台运行 nodejs 的时候,会给程序传递参数列表,参数和命令行的参数一致,多个参数使用空格分隔。
如:

node D:\a.js 'nodejs参数1' 'nodejs参数2'

这里,将会使用nodejs执行a.js文件,并传入参数 nodejs参数1nodejs参数2

在看例子的时候,会发现,要取第一个参数居然是使用的

process.argv[2]

需要注意的是,虽然这里只传了两个参数,但是实际是,程序内收到的参数为4个:

['node', 'D:\a.js', 'nodejs参数1', 'nodejs参数2']

第一个参数(process.argv[0])node是执行此脚本的命令名称,如果命令是

node.exe D:\a.js nodejs参数1 nodejs参数2

那么结果就会是:

['node.exe', 'D:\a.js', 'nodejs参数1', 'nodejs参数2']

第二个参数(process.argv[1])是脚本的完整路径。
第三个参数(process.argv[2])才是在命令行给程序传的第一个参数 nodejs参数1
第四个参数(process.argv[3])是在命令行给程序传的第一个参数 nodejs参数2