小编ugl*_*ode的帖子

Bookshelf.js - 如何保存多对多关系?

我遇到了以"多对多"关系保存数据的麻烦.

这是我的模特:

 var CoursePeople = bookshelf.Model.extend({
     tableName: 'course_people'
 });

 var Course = bookshelf.Model.extend({
     tableName: 'course',
     users: function(){
         return this.belongsToMany(User);
     }
 });

 var City = bookshelf.Model.extend({
     tableName: 'city',
     users: function(){
         return this.hasMany(User);
     }
 });

 var User = bookshelf.Model.extend({
   tableName: 'people',
   city: function(){
     return this.belongsTo(City);
   },
   courses: function(){
     return this.belongsToMany(Course);
   }
 });
Run Code Online (Sandbox Code Playgroud)

挑战是,如何将我在数组中获取的ID插入到我的数据库中的联结表(名为"course_people")?

到目前为止,这是我的代码:

 app.post('/users/', function(req, res) {
         console.log(req.body);
     var courses_ids = req.body.courses_ids; //array of ids
     delete req.body.courses_ids;
     new User(req.body).save().then(function(user){
         console.log(user.id);
         //How to store the ids in the junction table?

     }).catch(function(error){
         console.log(error); …
Run Code Online (Sandbox Code Playgroud)

orm node.js bookshelf.js

11
推荐指数
1
解决办法
7140
查看次数

Angular 2 - 如何从select/option获取值

Angular 2的大多数选择/选项解决方案的工作方式是返回实际内容,而不是value属性.但是,因为我还在学习Angular 2,所以我希望获得value点击按钮的实际属性.我设法在某种程度上解决了这个问题,但我不确定这是否是正确的方法.以下是我希望它如何工作的示例:

<select #selectedCategory>
    <option *ngFor="#category of categories" [value]="category.id">{{category.name}}</option>
</select>

<button (click)="getValueFromSelect(selectedCategory.value)">

/* This returns the selected category.name, not the value attribute. */
Run Code Online (Sandbox Code Playgroud)

上面的解决方案创建了以下HTML(请注意缺少value属性option):

<select _ngcontent-oom-3="">
  <!--template bindings={}-->
  <option _ngcontent-oom-3="">stuff 1</option>
  <option _ngcontent-oom-3="">stuff 2</option>
  <option _ngcontent-oom-3="">stuff 3</option>
</select>
Run Code Online (Sandbox Code Playgroud)

下面的解决方案实际上是有效的,但是,我需要一个ngModel以使其工作.

<select [(ngModel)]="selectedCategory">
    <option *ngFor="#category of categories" [value]="category.id">{{category.name}}</option>
</select>
<button (click)="getValueFromSelect(selectedCategory.value)">
/* This returns the value attribute correctly; however, do I really need a ngModel for one value? */
Run Code Online (Sandbox Code Playgroud)

解决这种情况的正确方法是什么?

谢谢你的建议.

javascript angular

9
推荐指数
1
解决办法
3万
查看次数

Express.js和multer:如何知道文件何时全部上传?

我正在使用Multer模块上传文件.虽然一切正常但是在github页面的末尾有一个警告,上面写着:"警告:文件上传完成后req.body被完全解析.过早访问req.body可能会导致错误."

这让我非常担心.我找不到让.post中间件知道何时上传文件并且req.body准备好使用的方法.这是我的代码:

app.js:

app.use(multer({ 
        dest: './uploads/',
        rename: function (fieldname, filename) {
            return filename.replace(/\W+/g, '-').toLowerCase() + Date.now();
        },
        putSingleFilesInArray: true       
        })
);
Run Code Online (Sandbox Code Playgroud)

upload.js:

router.route('/')
    .get(function(req, res){
        res.render('uploads');
    })
    .post(function(req, res){
        //how to wait here for the file to upload?
    });
Run Code Online (Sandbox Code Playgroud)

虽然我知道onParseEnd,但我不知道如何实现它,所以我至少有一些关于上传过程的信息.

javascript express multer

6
推荐指数
1
解决办法
7043
查看次数

猫鼬查询以过滤数组并填充相关内容

我试图查询该属性,该属性是对另一个架构的引用和一些其他数据的数组。为了更好的说明,以下是模式:

    var orderSchema = new Schema({
        orderDate: Date,
        articles: [{
            article: {
                type: Schema.Types.ObjectId,
                ref: 'Article'
            },
            quantity: 'Number'
        }]
    }),
    Order = mongoose.model('Order', orderSchema);
Run Code Online (Sandbox Code Playgroud)

虽然我成功地查询了引用,即:

Order.find({}).populate('articles.article', null, {
    price: {
        $lte: 500
    }
}).exec(function(err, data) {
    for (var order of data) {
        for (var article of order.articles) {
            console.log(article);
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

我在查询quantity属性时遇到了一些问题,即这不起作用:

Order.find({}).where({
    'articles.quantity': {
        $gte: 5
    }
}).populate('articles.article', null, {
    /*price: {
        $lte: 500
    }*/
}).exec(function(err, data) {
    for (var order of data) {
        for …
Run Code Online (Sandbox Code Playgroud)

mongoose mongodb node.js mongodb-query aggregation-framework

6
推荐指数
1
解决办法
2万
查看次数

Angular和rxjs - 我需要connect或refCount吗?

基本上,我问过昨天重复使用来自可观察数据的数据,然后我也在其他地方问过并阅读了一些,然后我想,为什么不只是持有一个observable并用map操作符操纵数据.

所以我只做一个HTTP请求,将observable存储到某个变量并在那里操作它.代码有效,但我不确定我.publishReplay(1).refCount()是否使用正确,或者我应该使用connect?或者,我甚至需要这些吗?此外,是否有任何可能的内存泄漏可能来自此服务?

这是服务代码:

@Injectable()
export class UsersApiService {

  private readonly baseUrl: string = 'https://reqres.in/api/users';
  resource$: Observable<any>;

  constructor(private http: HttpClient) {
    this.resource$ = this.http.get<IUserDetails[]>(this.baseUrl).pipe(
      tap((data) => {
        console.log('"getUsers" successfully called!');
      }),
      map((data: any) => {
        return data.data;
      })
    ).publishReplay(1).refCount();
  }

  getUsers(): Observable<IUser[]> {
    return this.resource$.pipe(
      map((data: IUserDetails[]) => {
        return <IUser[]>data.map((u) => {
          return {
            id: u.id,
            name: `${u.first_name} ${u.last_name}`
          };
        });
      })
    );
  }

  getUserById(id: number): Observable<IUserDetails> {
    return this.resource$.pipe(
      map((data) => …
Run Code Online (Sandbox Code Playgroud)

rxjs angular

6
推荐指数
1
解决办法
650
查看次数

Dexie.js - 如何加入表格?

我目前使用 Dexie.js 在本地存储数据。我有 3 个不同的表,它们通过使用外键相互连接。我设法设置了架构并插入了相应的数据。但是,当我要检索数据时,却找不到如何连接不同表的示例。

下面是一个例子:

var db = new Dexie('my-testing-db');
db.delete().then(function() {

  db.version(1).stores({
    genres: '++id,name',
    albums: '++id,name,year,*tracks',
    bands: '++id,name,*albumsId,genreId'
  });

  db.transaction('rw', db.genres, db.albums, db.bands, function() {
    var rock = db.genres.add({
        name: 'rock'
      }),
      jazz = db.genres.add({
        name: 'jazz'
      });

    var justLookAround = db.albums.add({
      name: 'Just Look Around',
      year: 1992,
      tracks: [
        'We want the truth', 'Locomotive', 'Shut me out'
      ]
    });

    var sickOfItAll = db.bands.add({
      name: 'Sick Of it All'
    });

    justLookAround.then(function(album_id) {
      rock.then(function(rock_id) {
        sickOfItAll.then(function(band_id) {
          db.bands.update(band_id, { …
Run Code Online (Sandbox Code Playgroud)

javascript dexie

5
推荐指数
1
解决办法
4540
查看次数

Karma自动手表无法正常工作

我大约1年前使用过Karma,一切正常.当我更改测试并保存.test.js文件时,测试自动运行 - 不必重新启动或更改任何内容.今天我想再次运行这些测试.有了一台新电脑,我不得不安装node和npm以及whatnot,然后我也安装了:

npm install -g karma karma-cli karma-jasmine karma-chrome-launcher

我将Karma配置如下(karma init):

    // Karma configuration
// Generated on Thu Apr 14 2016 14:50:35 GMT+0200 (Central Europe Summer Time)

module.exports = function(config) {
  config.set({

    // base path that will be used to resolve all patterns (eg. files, exclude)
    basePath: '',


    // frameworks to use
    // available frameworks: https://npmjs.org/browse/keyword/karma-adapter
    frameworks: ['jasmine'],


    // list of files / patterns to load in the browser
    files: [
      'js/*.js'
    ],


    // list of files …
Run Code Online (Sandbox Code Playgroud)

javascript karma-runner karma-jasmine

5
推荐指数
1
解决办法
1273
查看次数

SELECT - > OPTION,使用值vs ngValue

我刚刚发现valueSELECT的OPTION部分有一个替代属性,即ngValue.文档真的缺乏关于此的文档(我只能找到:https://angular.io/docs/ts/latest/api/forms/index/NgSelectOption-directive.html).无论如何,这个想法是,当你使用一个对象时ngModel,你可以使用ngValue它并且效果很好.否则,仅更新例如ID.如果我们只有一个字符串数组,那么值就足够了.以下是示例:

{{myModel | json}}
<select [(ngModel)]="myModel">
  <option *ngFor="let i of items" [ngValue]="i">{{i.value}}</option>
</select>

<br /><br />

{{mySimpleModel}}
<select [(ngModel)]="mySimpleModel">
  <option *ngFor="let i of simpleItems" [value]="i">{{i}}</option>
</select>
Run Code Online (Sandbox Code Playgroud)

虽然这可以按预期工作,但两者之间存在明显差异:如果使用ngValue,则不会在下拉列表中选择预定义值,而对于基元类型,则在加载时选择值.例如:

items: any[] = [{id: 1, value: 'item1'}, {id: 2, value: 'item2'}, {id: 3, value: 'item3'}];
myModel: any = {id: this.items[1].id , value: this.items[1].value};

simpleItems: string[] = ['item1', 'item2', 'item3'];
mySimpleModel: string = this.simpleItems[1];  
Run Code Online (Sandbox Code Playgroud)

请参阅此处的示例:https://plnkr.co/edit/JBrtmx7QkPZztBjaqYkS ?p = …

javascript angular

5
推荐指数
1
解决办法
7544
查看次数

express.js-创建一个新的pdf并强制下载,而不将其保存在服务器上

我正在将express.js与pdfkit一起使用以生成pdf并将其强制下载给用户。为此,我使用了res.download属于express.js 的函数。我也可以pipe将pdf转换为res,但随后下载将无法开始。

好的,这是我的问题:是否可以通过某种方式在服务器上创建pdf并将其“存储在内存中”或类似的东西?当前,我必须定义一个创建pdf的特定位置,然后从该位置读取并提供给用户。基本上,我想“跳过”保存到磁盘和从磁盘读取的文件,但仍然为用户强制下载。

也许我在这里不理解某些概念,所以不胜感激!

这是代码:

router.get('/pdf/:id', function(req, res) {
    Order._getById(req.params.id).
    then(function(order) {
        if (order !== null) {
            var doc = new PDFDocument();
            var result = order.toJSON();

            var products = result.products;
            var user = result.user;
            var comments = result.comments;

            doc.registerFont('arial', path.join(__dirname, '../fonts', 'arial' , 'arial.ttf'));         

            for (var i in products) {
                var product = products[i];
                doc.font('arial').text(product.name);
                doc.image(path.join(__dirname,'../uploads','thumb', product.picture), {scale: 1.0});
                doc.font('arial').text(product.price + ' €');
            }

            var r = doc.pipe(fs.createWriteStream(path.join(__dirname, '../uploads', 'out.pdf')));
            doc.end();

            r.on('finish', function(){
                //the …
Run Code Online (Sandbox Code Playgroud)

pdf-generation node.js express

4
推荐指数
1
解决办法
3083
查看次数

Nodejs使用.p12证书向Web服务请求

所以,标题非常简单.我想从公司使用Web服务,我得到了.cer和.p12文件.据说,我应该在提出请求时使用.p12.我已将.cer导入windows中,我可以轻松地向邮递员提出请求.但是,当我尝试使用node.js进行请求时,我收到错误.这是代码,我正在使用request模块:

var headersOpt = {
    "content-type": "application/json",
};

var options = {
    url: 'https://some-url/api',
    cert: fs.readFileSync(__dirname + '/certs/myCert.p12'),
    headers: headersOpt
};

request.get(options, (error, response, body) => {
    console.log(error);
    console.log(response);
    console.log(body);
});
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

{ Error: error:0906D06C:PEM routines:PEM_read_bio:no start line
    at Object.createSecureContext (_tls_common.js:89:17)
    at Object.exports.connect (_tls_wrap.js:1048:48)
    at Agent.createConnection (https.js:111:22)
    at Agent.createSocket (_http_agent.js:224:26)
    at Agent.addRequest (_http_agent.js:192:10)
    at new ClientRequest (_http_client.js:256:16)
    at Object.request (http.js:39:10)
    at Object.request (https.js:239:15)
    at Request.start (D:\parser\node_modules\request\request.js:748:32)
    at Request.end (D:\parser\node_modules\request\request.js:1512:10)
  opensslErrorStack:
   [ 'error:140DC009:SSL routines:SSL_CTX_use_certificate_chain_file:PEM lib' ] }
Run Code Online (Sandbox Code Playgroud)

ssl openssl certificate node.js p12

4
推荐指数
1
解决办法
5436
查看次数

Node.js - promisify readline

正如标题所述,我想知道是否可以在 node.js 中使用promisifyhttps://nodejs.org/dist/latest-v8.x/docs/api/util.html#util_util_promisify_originalreadline?我只能这样做:

let data = [];
const parse = () => {
    return new Promise((resolve, reject) => {

        const rl = readline.createInterface({
            input: fs.createReadStream(path)
        });

        rl.on('line', (line) => {
            data.push(line);
        });

        rl.on('close', () => {
            resolve(data);
        });
    });
};
Run Code Online (Sandbox Code Playgroud)

javascript node.js promise

4
推荐指数
3
解决办法
3188
查看次数

Angular2 - ngZone - google.maps不会触发更改检测

我正在使用Geocoder API,当返回结果时,双向数据绑定不起作用.数据不会在视图中刷新.如果我手动更改任何其他属性,数据会刷新...所以,我google(很多)并找到了一个使用的解决方案ngZone.这就是我所做的:

  getLocation(address: string): void {
    var mygc = new google.maps.Geocoder();
    this._ngZone.runOutsideAngular(() => {

      mygc.geocode({
        'address': address
      }, (results, status) => {

        var data: any = results[0];

        this._ngZone.run(() => {
          this.myObject.myData = {          
            lat: data.geometry.location.lat(),
            lng: data.geometry.location.lng()
          };
        });

      });

    });
  }
Run Code Online (Sandbox Code Playgroud)

所以我有几个问题:

  1. 什么时候ngZone用?文档很松散......
  2. 因为这个工作没有runOutsideAngular()那么好,使用它的重点是什么?该示例还包括此函数调用,因此我也实现了它.但它没有它也可以工作......
  3. myObject在视图中还有其他方法可以刷新吗?

谢谢!

google-geocoder angular

3
推荐指数
1
解决办法
1846
查看次数

Angular 2 http - 在返回之前过滤observable

在服务中我有这个定义:

getAllHTTP(): Observable<IUser[]> {
   return this.http.get(`${this.url}/users`)
              .map(res => res.json())
              .catch(err => Observable.throw(err));
}
Run Code Online (Sandbox Code Playgroud)

在组件中:

ngOnInit() {
   const self = this;
   this._uService.getAllHTTP().subscribe(
      function (data) {
        console.log(data);
        self.listOfUsers = data
      },
      (error) => console.error(error)
   );
}
Run Code Online (Sandbox Code Playgroud)

所以现在我想在将observable传递给组件之前过滤数据,我这样做了:

  getAllHTTP(): Observable<IUser[]> {
     return this.http.get(`${this.url}/users`)
                .map(res => res.json())
                .filter(<IUser>(x) => x.id > 2)
                .catch(err => Observable.throw(err));
  }
Run Code Online (Sandbox Code Playgroud)

它不起作用.该x滤波器是一个实际的阵列,而不是阵列中的项目.这真的很奇怪,我认为它与RXjs无关,因为它的工作方式与本例中的假设相似:http://jsbin.com/nimejuduso/1/edit?html,js,console,output

所以我做了一些挖掘,显然我应该使用flatMap.好的,我这样做了,取而代之map,flatMap但现在我收到了这个错误:

找不到支持对象'[object Object]'

显然,当我订阅时,我曾经得到一个数组,现在我一次得到一个对象......为什么Angular2表现得那样?或者毕竟这是RXjs?

javascript observable rxjs angular

0
推荐指数
1
解决办法
8719
查看次数