Quantcast
Channel: CNode:Node.js专业中文社区
Viewing all 14821 articles
Browse latest View live

请问egg-mongoose报错怎么解决啊

$
0
0

image.png

第一次用egg,想请教下这个怎么解决?

//config.default.js
exports.mongoose = {
  url: 'mongodb://127.0.0.1:27017/club',
  options: {}
};

Java 和 Node.js 之间的通信问题(基于 TCP/IP)

$
0
0

我用 Node.js 建了一个 tcpserver,然后用 Java 的 socket 去连接,结果 Java 这边可以把信息完整无误的发给 Node.js 这边,但是 Node.js 返回的数据始终读不到

private void initConnection() {

    if (!isRun)
        return;

    try {
        Log.i(TAG, "连接中……");
        socketClient = new Socket(_ip, _port);
        int timeout = 10000;
        socketClient.setSoTimeout(timeout);// 设置阻塞时间
        Log.i(TAG, "连接成功");
        bufferedReader = new BufferedReader(new InputStreamReader(
                socketClient.getInputStream()));

        printWriter = new PrintWriter(new BufferedWriter(new OutputStreamWriter(
                socketClient.getOutputStream())), true);



        Log.i(TAG, "输入输出流获取成功");
    } catch (UnknownHostException e) {
        Log.i(TAG, "连接错误UnknownHostException 重新获取");
        e.printStackTrace();
        try {
            Thread.sleep(3000);
        } catch (InterruptedException e1) {
            e1.printStackTrace();
        }
        initConnection();

    } catch (IOException e) {
        Log.i(TAG, "连接服务器io错误");
        e.printStackTrace();
    } catch (Exception e) {
        Log.i(TAG, "连接服务器错误Exception" + e.getMessage());
        e.printStackTrace();
    }
}

读取部分

while (isRun) { try { if (socketClient != null) { if (bufferedReader == null) { return; } while ((line = bufferedReader.readLine()) != null) { System.out.println(line); }

            } else {
                initConnection();
            }
        } catch (Exception e) {
            Log.i(TAG, "数据接收错误" + e.getMessage());
            if (!(e instanceof SocketTimeoutException)) {
                initConnection();
            }
        }
    }

pkg-tools 查询包信息命令行工具

$
0
0

功能简介

用于学习,ts及命令行工具的实现,对git和npm命令简易封装

源码地址:https://github.com/godghdai/pkg-tools

搜索包,从github或npm搜索

optionaliasdescribe
–limit-l每页显示的条目
–page-p分页显示,第几页
–trans-t按翻译后包名搜索,中文转英文或者英文转中文
–g-g从github获取版本,默认从npm

查询包版本,从github或npm获取

optionaliasdescribe
–limit-l返回的条目数
–range-r根据条件(semver range)过滤版本列表
–g-g从github获取版本,默认从npm

查单词

optionaliasdescribe
–engine-e翻译引擎,值为(baidu,qq,youdao首字母)

从github克隆主包及依赖,用来批量下载源码

optionaliasdescribe
–filter-f过滤包名的正则
–include-i保留包名的正则
–main-m是否克隆主包,默认不克隆

Node API经验与种子项目分享 (一)项目综述

$
0
0

前言

基于本人在现在公司的Node微服务实践, 不断维护升级着一个Node Restful API种子项目, 特此共享出来以供借鉴和讨论. 项目中几乎所有的东西都使用了node/javascript及相应模块的最新功能, 语法, 和实践. 如果你需要的是一个大而全的框架, eggjs应该是很好的选择. 如果你动手能力强, 追求自由灵活, 并且不排斥express, 那可以试试采用我这个项目.

项目github仓库地址, 欢迎star: https://github.com/xiaozhongliu/node-api-seed下面先贴一下我在github上对项目的综合描述, 完了在下一篇帖子会一一展示项目的各个方面, 至于怎么实现的可以看源码, 相信你会喜欢上我干净简洁, 层次清晰, 与时俱进的代码风格的.

综述

Techs involved

AspectTech
web fxexpress
tasknode-schedule
db postgressequelize
db mongodbmongoose
memcachenode_redis
http clientaxios
loggerlog4js-node
mailernodemailer
dashboardexpress-status-monitor
jwt authjsonwebtoken
validationexpress-validator
async flowasync/await of ES7
log authhttp-auth
js checkereslint
proc manapm2

Other features offering

Api access control via ts & token. Elaborate api request log into files. Flexible declarative request validation. Request log online view behind http auth. Server status monitor dashboard behind http auth. Ready made api samples with jwt and latest js features. Centralized system level config & messages management. Reasonable multi-env config merging mechanism. Definite DRY, SRP, AOP, ES6/ES7, OCD, etc.

Npm commands usage

cnpm i      # install all packages for dev env
npm start   # run service in dev env, or hit F5 to debug in vsc
npm run pm2start        # host via pm2 in prod env
npm run pm2startqa      # host via pm2 in qa env
npm run pm2starttest    # host via pm2 in test env
npm run pm2restart      # restart hosted service in prod env
npm run pm2restartqa    # restart hosted service in qa env
npm run pm2restarttest  # restart hosted service in test env
npm run pm2stop         # hang up hosted service
npm run pm2delete       # remove hosted service

npm package config 如何使用环境变量来生成新的环境变量

$
0
0

我在编写 docker 镜像的时候, 想要通过 npm version 来控制 docker 版本号

{
	"author": {
	  "name": "author"
	},
	"version": "0.0.1",
	"name": "name",
	"config": {
		"dockerimage": "$npm_package_author_name/$npm_package_name:$npm_package_version"
	},
	"scripts": {
		"build": "docker build . -t $npm_package_config_dockerimage"
	}
}

期望 $npm_package_config_dockerimage返回解析好的字符串 author/name:0.0.1, 实际返回的却是未解析的字符串 $npm_package_author_name/$npm_package_name:$npm_package_version

请教各位大佬这个该怎么办


以上是原提问

这是暂时我找到的相对来说比较优雅的解决方案

{
	"config": {
		"dockerimage": "echo $npm_package_author_name/$npm_package_name:$npm_package_version"
	},
	"scripts": {
		"echo": "echo $(eval $npm_package_config_dockerimage)"
	}
}

相对于新建一个文件来获取变量解析后的字符串来说要好点. 但是使用 eavl来解析字符串也是挺丑的, 不过只要把 $(eval $npm_package_config_dockerimage)整体当做一个变量也还好, 毕竟变量名称已经挺长的, 再长一点影响也不是特别大

但这个方案不是很优雅, 所以还有没有优雅的解决方式呢

前端转Node后端,刚入职,要注意哪些方面

$
0
0

之前是做前端的,主要写React。年前跳槽到公司做Node后端。刚入职两天手头还没有什么任务,请问刚开始主要学哪些东西,才能完成前端到后端的一个过渡和思维的转变。

protobufjs 3.8.2出现TypeError: serverSchema.bulid is not a function

$
0
0

我使用的protobufjs@3.8.2版本,proto2 ,我安装也是用的npm,但是使用的时候就是报这个错误:TypeError: serverSchema.bulid is not a function 我开始以为是我安装出现问题,我又重新安装了好几遍,我看的别人博客上的,他们是可以这么用的,熬夜整得头疼,下面我放上图片,求各位大神帮忙看下。 11111111110.pngcupwww.png

北京求推荐一个好的node线下培训课程

$
0
0

价格不是问题,主要是想系统学习node,自己看东一榔头西一棒槌的。


webpack 打包后的问题,情景(前端页面2天写完)

$
0
0

公司分工为:前端写完页面,给后台程序(外包公司,企业站,前端页面2天写完,后台套页面) 页面用webpack打包过,比如合并javascript 后台负责上传代码到服务器 如果这样的情景,后期怎么维护?

接触webpack时间不长 目前用gulp:并没有对javascript做任何操作,只是编译sass、公共头尾、自刷浏览器等一些辅助功能 用webpack怎么发挥作用?或者适用场景

使用 mongodb 遇到的db.collection is not a function

$
0
0

TypeError: db.collection is not a function

之后在连接数据库回调中加入 var mydb = db.db(‘myDatabaseNameAsAString’); 参考:https://stackoverflow.com/questions/43779323/typeerror-db-collection-is-not-a-functionhttps://mongodb.github.io/node-mongodb-native/api-generated/mongoclient.html不太清楚这么写是为什么?

具体代码: var MongoClient = require(‘mongodb’).MongoClient; var assert = require(‘assert’); var url = ‘mongodb://localhost:27017/test’; var insertDocument = function(db, callback) { db.collection(‘restaurants’).insertOne( { “address” : { “street” : “2 Avenue”, “zipcode” : “10075”, “building” : “1480”, “coord” : [ -73.9557413, 40.7720266 ] }, “borough” : “Manhattan”, “cuisine” : “Italian”, “grades” : [ { “date” : new Date(“2014-10-01T00:00:00Z”), “grade” : “A”, “score” : 11 }, { “date” : new Date(“2014-01-16T00:00:00Z”), “grade” : “B”, “score” : 17 } ], “name” : “Vella”, “restaurant_id” : “41704620” }, function(err, result) { assert.equal(err, null); console.log(“Inserted a document into the restaurants collection.”); callback(); }); }; // 连接数据库 MongoClient.connect(url, function(err, db) { assert.equal(null, err); console.log(‘Connected correctly to server.’,db); var mydb = db.db(‘myDatabaseNameAsAString’); // 插入数据 insertDocument(mydb, function() { db.close(); }); });

模块加载报错,好无语啊,求助!!!!!

$
0
0

我直接写绝对路径来加载模块,比如 F:/project/moduleDev/platform/action/actionMap.js,然后就报了这样的错误 module.js:345 request.charCodeAt(0) !== 46/./ || ^

TypeError: request.charCodeAt is not a function at Function.Module._resolveLookupPaths (module.js:345:15) at Function.Module._resolveFilename (module.js:530:20) at Function.resolve (internal/module.js:18:19) at Object.<anonymous> (F:\project\moduleDev\bin\task.js:106:30) at Module._compile (module.js:635:30) at Object.Module._extensions…js (module.js:646:10) at Module.load (module.js:554:32) at tryModuleLoad (module.js:497:12) at Function.Module._load (module.js:489:3) at Function.Module.runMain (module.js:676:10)

这是什么鬼???? 求解答

koa2+react搭建ssr时,服务端做重定向时不能正确拿到StaticRouter处理过后的context

$
0
0

最经在搭一个koa2+react的ssr架构,遇到个问题,path="/“需要重定向到path=”/home" jsx里面用到<Route path="/" render={() => <Redirect to="/home" />} /> ssr用到的代码如下 ssr-entry.js 1516951924(1).jpg server.js 1516952176(1).jpg

可以看到我现在是那ctx.url判断写死重定向到/home的 但实际上按照react-router V4的官方文档,

我应该在const app = await serverBundle(store, routerContext, ctx.url);之后去判断routerContext.url是否存在。 但是当我按照官方文档的写法,访问path="/"的路径,routerContext依然是{}。 1516952527(1).jpg1516952891(1).jpg可以看到访问/的时候,打印的routerContext依然为{}

希望我表述清楚了,求大牛给支个招,是我少做了哪一步吗?之前用express做过是没问题的。

vue这么动态引入vue文件?

$
0
0

我需要在vue项目运行时引入新的vue文件,该文件是服务器生成的通过ajax请求回去的,请问如何实现这个功能?

(求大神~)请教一下node中的Http的request 发送接口请求.do的为什么url一直404

request-promise 模拟登录以后,怎么拿到 set-cookie

$
0
0

rt

request 可以这样:

request.post({url: 'http://127.0.0.1:3000/users/login', form: {user: 'adminxxxx'}}, function (err, res, body) {
  console.log(res.headers['set-cookie']);
}); 

但是 request-promise 貌似只返回 body 一个参数。 此外,request.post 方法貌似不能被 bluebird.promisify。

我最终目的是得到一个能放在 async/await 里面的方法,如:

async function getCookie(req, res, next) {
	let cookie = await request(...);
	return ...;
}

除了 async 立即执行函数以外有没有别的方法:

function test() {
  return new Promise((resolve, reject) => {
	  request(url, function() {
	  	resolve(cookie);
	  });
    }).on('error', (error) => {
      reject(error);
    });
  });
};

(async () => {
  try {
    console.log(await test());
  } catch (error) {
    console.log(error);
  }
})();

浏览器 录音得到的blob 数据传到 后台,express框架用 multer接收,保存后,,播放没声音。。。

$
0
0

浏览器 录音得到的blob 数据传到 后台,express框架用 multer接收,保存后,,播放没声音。。。

怎么回事呢。。。。

求大佬 赐教!!!

[文档翻译] 全栈速成,最适合前端的后端服务框架: Parse

$
0
0

就在最近,我完成了Parse JavaScript SDK指南的翻译,并在指南中加入了一些教程、示例,以保证新手能够快速上手。

我在QQ群里面贴出地址宣传了下,然后发现大部分人听都没听说过Parse,果然,我是站在潮流之巅的弄潮儿啊hhhhhh~

那么,Parse到底是什么?

三个字就可以概括:去后端。

Parse服务其实已经推出很多年了,在4年前被Facebook 8500万美元收购,在去年被Facebook开源,但是在国内几乎一直无人问津。

国内同类的服务平台,即BasS(Backend as a Service)服务平台主流的有Leancloud、Bmob。

其中Leancloud我使用过,Bmob也注册过。Leancloud达到免费阈值以后的收费方案是每天最低消费30元,Bmob达到免费阈值以后的收费方案有99元/月的套餐。对于原型开发阶段的应用,其服务的免费额度使用还是绰绰有余的。

就像刚才说的,BaaS服务就是去后端,也就是说,后端几乎完全不需要你自己开发了,数据库、用户系统、安全系统、Hook回调、API查询等都为你搭建好了。而且,比你搭建的还好。你只需要在项目中集成SDK,然后直接调用方法传参就可以完成前后端交互。

打个比方,我要写一个按钮的用户注册方法:

//集成SDK
import parse from 'parse'
parse.serverURL = 'http://localhost:2018/parse'
parse.initialize('myAppId', '123456')

//在按钮点击实践中调用注册方法:
button.on('click',function(username,password){
  let user = new parse.User()
  user.set('username', '000001')
  user.set('password', 'lzhlmcl,yhblsqt')
  user.set('email', 'xxxxx@qq.com')
  user.signUp().then(user => {
  alert('注册成功')
}).catch(console.error)
})

完成!

只需要十几行代码,不需要写后端和接口。当上面代码弹出注册成功后,后台还会发送验证邮箱的邮件给用户,然后后台数据库就会出现新注册的用户。

怎么样,so easy吧。

简直就是,前端抢后端饭碗系列。

当然了,使用Leancloud、Bmob这样的商业服务平台,数据是存储在他们的服务器上的。使用Parse自己搭建后端,则是保存在自己的服务器上。

对比一下:

Parse开源,数据库绝对私有,完全免费,这是Parse的优点。

Leancloud、Bmob则是本地化做的非常优秀,比如对微信接口、短信验证的集成,这是他们的优点。

上述优点,双方都不具备对方的优点,所以,让你选的话,你选胸大的还是腿长的?

我一般是结合业务,如果我觉得这个应用就是玩玩,肯定做不大,为了省去维护和服务器维护,我会选择使用Leancloud,Bmob不熟练。如果说这个应用以后会有很大访问量,打算认真做做,预期会超过L、B的免费额度,出于平穷限制,我会选择Parse。

不管你选择哪个,Parse其实都值得你掌握的。

身为一个前端,如果你会使用L、B,首先也是不错的,至少开发效率很高了;不过,依赖于第三方商业平台,还是不够独立,算不得全栈开发者。如果你会使用Parse,你就相当于快速掌握了一种后端技术栈,算得上是全栈了。

我为什么这么推荐Parse,并把Parse的文档翻译中文,整合详细的教程和实例呢?Parse是一个开源项目,也不是我的项目,我就是非常喜欢这类框架,你知道,发现一个好东西,总是特别想推荐给朋友们的。

接下来,我还会继续写几个教程和例子,虽然,不是非常必要,有的人文档过一遍就会用了。

最后附上Parse JavaScript SDK中文文档地址

零配置无痛构建Javascript的库/组件

$
0
0

WHY

对于经常造轮子的人来说,最痛苦的事莫过于配置开发环境。

如果你构建一个纯粹的库,你可能需要ES6支持,那么你需要Babel,还需要安装Babel,然后根据需要的特性安装preset,安装plugins

如果你需要构建一个React/Vue组件,那么就不是Babel那么简单,还需要配置Webpack。

包括一堆的Loader,plugins,entry,output,devServer等等,不厌其烦…

所以很迫切的需要一个零配置的开发工具,你看parcel不就是因为零配置备受推崇吗。

所以,自己撸一个工具,configless是目标,专注于打包库/组件.

npm install @axetroy/libpack -g

构建一个Vue组件

// index.vue
<template>
  <div>
    <h2>Hello world</h2>
    <h2>This is an Vue example component</h2>
  </div>
</template>

<script>
console.log("Load component");
export default {
  name: "index"
};
</script>

<style scoped>

</style>
# -- externals 指明vue需要外部加载
libpack ./index.vue ./build --externals vue

然后你还可以预览一下刚写的组件

// main.js
import Vue from "vue";
import App from "./index.vue";

new Vue({
  el: document.body,
  render: h => h(App)
});
libpack ./main.js ./build --server

完整代码

构建一个React组件

// index.jsx
import React, { Component } from "react";

class Example extends Component {
  render() {
    return (
      <div>
        <h2>Hello world</h2>
        <h3>This is an react example component</h3>
      </div>
    );
  }
}

export default Example;
# -- externals 指明react和react-dom需要外部加载
libpack ./index.jsx ./build --watch --externals react,react-dom

然后你还可以预览一下刚写的组件

libpack ./app.jsx ./build --server

完整代码

Typescript

// src/index.ts
class Person {
  say(word: string) {
    console.log("hello " + word);
  }
}

new Person().say("world");

libpack ./src/index.ts ./build

typescript项目需要有tsconfig.json,如果项目目录不存在,那么会创建一个默认配置

完整代码

Flow

// index.js
// @flow
class Person {
  say(word: string) {
    console.log("hello " + word);
  }
}

new Person().say("world");

libpack ./index.js ./build

完整代码

Javascript

// index.js
console.log("Hello world");

// generator
function* generator() {
  yield Promise.resolve();
}

// async await
async function asyncFunction() {
  await Promise.resolve();
}

// dynamic import
import("./antoher");

// do expression
function doExpression() {
  let a = do {
    if (x > 10) {
      ("big");
    } else {
      ("small");
    }
  };
}

// Object rest spread
let { x, y, ...z } = { x: 1, y: 2, a: 3, b: 4 };
console.log(x); // 1
console.log(y); // 2
console.log(z); // { a: 3, b: 4 }

// decorator
function readable() {
  return function() {};
}

@readable()
class Stream {}
libpack ./index.js ./build

完整代码

最后

libpack仅仅是一个内置了多个preset和plugins的Webpack配置,省去了配置的烦恼。

你也不需要关心怎么配置es2015,es2016,es2017,也不用关心你能不能用新特性.

撸起袖子就是干.

欢迎各位大佬指教

Github: https://github.com/axetroy/libpack

koa2怎么处理数据库查询回来的数据?

$
0
0

各位大牛好!我想做一个商城的demo,前端用webpack+vue,后端是用koa2,数据库mongod。由于对node了解不深,选择遇到一个问题。先说说我的逻辑: 我的mongo现在有2个表,一个是用户信息users,另一个是所有商品信息goodsQQ截图20180127111023.png。因为我在添加商品的时候是没有把商品的价格存入用户的购物车列表里。现在我要展示购物车列表,当从数据库中查出用户users的购物车列表,想根据购物车列表的id再去查询商品列表goods所对应的商品信息。现在2个数据我都拿到了。然后想把商品列表goods里的商品价格拼接到用户购物车列表去,但是我怎么都添加不了。求大神解答。QQ截图20180127112153.png谢谢!

一份比较完整的webpack配置文件

Viewing all 14821 articles
Browse latest View live