Articles of node.js

为什么nodejs产生的进程变成<defunct>直到父进程退出

我们先看看这个现象, Nodejs代码: const cp = require('child_process'); var ls = cp.spawn('ls', ['/']); ls.stdout.on('data', (data) => { console.log(`stdout: ${data}`); }); ls.stderr.on('data', (data) => { console.log(`stderr: ${data}`); }); ls.on('close', (code) => { console.log(`child process closed with code ${code}`); }); while(true){} 运行这个nodejs代码,没有任何显示,似乎没有事件被触发。 然后在另一个shell中运行“ps -ef | grep ls | grpe -v grep”,结果是: liyuanq+ 10995 10990 0 11:06 pts/3 00:00:00 [ls] […]

缺less或无效的AccountNumber UPS运输API错误代码(9500523)

我将Nodejs UPS运输API与我的网站集成在一起。 我正在使用这个模块。 我使用皮卡API。 但是,它会抛出一个错误为Missing or invalid AccountNumber UPS 。 通过我的UPSconfiguration文件添加的帐号是有效的。 附加代码。 有人能帮我弄清楚这里有什么问题,或者提供一些关于这个错误原因的更多信息。 var upsAPI = require('shipping-ups'); var util = require('util'); var ups = new upsAPI({ environment: 'sandbox', // or live username: 's*******2', password: 'A*******3', access_key: '*************', imperial: true // set to false for metric }); ups.pickup({ rate_pickup_indicator: 'Y', shipper_account: 'ABC123', pickup_date: '20141223', eariest_time_ready: '0800', […]

存储令牌推送通知

我们的项目目前有一个Node jS后端,我们想为iOS实现推送通知。 我们做了一些调查,发现我们必须将APN提供给我们的令牌存储在我们的数据库中,以便将推送通知发送到特定设备。 有人可以证实这一点或有没有更好的方式发送通知? 其次,我还发现,当设备通过软件更新,这会改变他们的令牌,这意味着我们必须有能力更新我们的数据库中的令牌,因为它会经常改变。 这也是非常重要的。 还有其他的时候令牌可能会改变吗? 最后,Node中有没有好的库来发送推送通知? 提前致谢!

为什么与sparkPost的电子邮件进入垃圾邮件?

我使用SparkPost发送电子邮件,但我发送的电子邮件是垃圾邮件。 我使用的发送电子邮件是: sandbox@sparkpostbox.com 也许是因为这个电子邮件进入垃圾邮件。

安全path.resolve不从父母逃脱

我正在编写一个(expressjs)http服务,它在每次调用时都会获取相对path作为用户input,从基于该path的文件系统中读取文件并对其进行处理,如下所示: app.get("/api", (req, res, next) => { var filePath = path.resolve("./datasource", req.query.path); fs.readFile(filePath, "utf8", (err, data) => { processData(data, (err, processed) => { res.json(processed); }); }); }); 我清除error handling。 这个问题是,可以调用URL /api?path=../../../etc/passwd ,这将从服务器本身泄漏信息。 我想这个API不处理./datasource文件夹以外的文件。 我想我可以使用一些自定义的实现path.resolve ,它不会逃避父,但它看起来像我的path模块中没有这样的function。 我想到的一些例子是: saferesolve("./datasource", "a/b") === "./datasource/a/b" saferesolve("./datasource", "a/b/../c") === "./datasource/a/c" saferesolve("./datasource", "../..") === "./datasource" saferesolve("./datasource", "../../a/b") === "./datasource/a/b" saferesolve("./datasource", "../../a/b/..") === […]

节点脚本如何在我当前的bash上下文(进程)中运行?

在bash你可以source或. 在当前的上下文中运行一些bash脚本。 所以,如果你有例如文件foo与alias bar='echo bam'在其中,当你运行它像 $ . foo 它会从文件foo中将这个别名发送到当前的上下文中。 我知道,如果我通常使用#!/usr/bin/env node第一行来运行节点脚本,那么这个脚本在子shell中运行,或者作为单独的进程运行。 我想避免这一点,并使节点脚本作用于我当前的bash进程(上下文)。 我怎样才能运行节点脚本,改变我当前的bash上下文? ps:任何例子都不错。 节点脚本只能改变我的目录,但它也必须发生在我当前的bash上下文中。 ps2:小问题:如果在节点中是不可能的(我很难相信这个),或者它非常复杂,那么在其他语言中是可能的吗? 像PHP,Java,Ruby(我不问C,因为它很明显:)如果是这样,请给我一些例子。

计算AJAX下载速度

我想在下载文件时实时显示下载速度,但下面的代码不起作用。 Speed为整个下载返回0.0。 https.get(options, function (update) { fileSize = (parseInt(update.headers['content-length']) / 1048576).toFixed(1); startTime = (new Date()).getTime(); endTime = startTime; update.on('data', function (chunk) { file.write(chunk); len += chunk.length; fileDownloaded = (len / 1048576).toFixed(1); endTime = (new Date()).getTime(); time = (endTime – startTime) / 1000; speed = ((fileSize / time) / (1024 * 1024)).toFixed(2); progressPercentage.html(fileDownloaded + ' MB […]

未知的Twitter API问题

对,如此。 我尝试使用“Twitter”模块(在npm上find,使用npm install twitter )从给定的screen_name中获取朋友列表,但是,我的程序不能正常工作,我不确定为什么。 在这个时候,所有它应该做的是摆脱朋友的名单,包含在朋友的JSON对象,但不起作用,出于某种原因。 我不知道为什么。 代码包含在下面。 如果您需要提问,请留下评论。 function readTokenFromDisc(){ //Used to save on requests. return new Promise(function(resolve, reject){ fs.readFile('bearerToken.txt', 'utf8', function(error, data){ resolve(data); }); }); } function buildClient(bToken){ return new Promise(function(resolve, reject) { var client = new Twitter({ consumer_key: process.env.TWITTER_CONSUMER_KEY, consumer_secret: process.env.TWITTER_CONSUMER_SECRET, bearer_token: bToken }); resolve(client); }); } function grabTwitterFollowers(client){ return new Promise(function(resolve, […]

如何通过neo4j REST API正确地创build数千个cypher节点?

我需要在cypher <3.0.0中通过node.js创build很多节点(比如50.000)。 我正在使用async.times发布所有密码查询。 不过看起来REST API正在崩溃(并死亡),因为可能有太多的请求通过。 我想继续使用节点,而不是使用LOAD CSV。 我的代码如下: var createStyles = function (data, cb) { var distinctData = …; console.log("creating styles"); … var create = function (id, callback) { console.log("creating st " + id); var req = … styles.addOrUpdate(req, null, function (err, node) { callback(null, node); }); } // call the same function multiple times […]

由于Nodejs的asynchronous性质而获得空数组

刚开始使用Nodejs,并在下面的代码中将数组作为响应时,面临这个问题。 我知道这是由于Nodejs的asynchronous性质,试图应用asynchronous,但没有得到所需的结果。 有人可以让我知道这个代码的修复: array = []; var company = companySchema.Company; company.findOne({_id: companySchema.objectId(req.tempStore.companyId)}, function (err, comp) { if (err) { console.log(err); } else { var i; var length = comp.events.length; var dataset = datasetSchema.dataset; for (i = 0; i < length; i++) { dataset.find({companyId:comp.events[i]}, function (err,data) { if (err) { console.log(err); } else { array.push(data); } […]